가끔 다른 사람의 Go 코드를 보면 코드에 포인터를 사용하는 사람도 있고 그렇지 않은 사람도 있습니다.
Person이라는 구조체 유형이 있다고 가정해 보겠습니다. 일부 메서드에서는 func methodA(*person Person)를 매개 변수로 사용하거나 구조체 자체 메서드로 func *(person Person) methodA()를 사용하는 것으로 나타났습니다. 사람의 구조. (추천 학습: go)
methodA를 직접 호출할 수도 있지만 포인터를 사용합니다.
또는 지도 구조에서 var personMap map[string]*Person의 사용법을 볼 수 있습니다
Java에서 golang으로 옮기면 이해하기 쉽지 않을 수 있습니다. Java 세계에는 포인터가 없기 때문에 그냥 직접 전달해서 사용할 수 있습니다. 하지만 golang으로 갈 때는 주의할 점이 많습니다.
그럼 언제 사용해야 할까요? 어떤 곳에서는 왜 필요한가요?
포인터를 사용하지 않으면 어떤 경우에는 구조에 값을 할당하는 것이 불가능합니다
한 부분을 살펴보겠습니다. 이 코드는 포인터를 사용하지 않고 먼저 여러 개의 코드를 정의합니다. 테스트용 개체
type Person struct { //person结构体,包含年龄,名称,车 age int name string car Car } type Car struct { //person名下的车 name string //车的名字 } var personMap map[string]Person //一个存放person的map func setName(person Person, name string) { //给参数person设置名字 person.name = name } func (person Person) setName(name string) { //设置名字 person.name = name } func printName(person Person){ //打印person的名字 fmt.Println(person.name) } func (person Person)printName(){ //结构体person自己支持打印名字 fmt.Println(person.name) }
따라서 구조의 변수 내용을 수정해야 할 때 메서드에 의해 전달된 구조 변수 매개변수는 구조의 주소인 포인터를 사용해야 한다는 결론을 내릴 수 있습니다
. 맵에서 아키텍처의 변수를 수정해야 하는 경우도 있습니다. 때로는 구조체 주소를 맵의 값으로 사용해야 하는 경우도 있습니다.
구조 변수만 읽으면 포인터를 사용하지 않고 직접 참조를 전달할 수 있습니다.
*type 여기의 type 변수는 주소를 저장합니다. 주소를 얻으려면 &type을 사용해야 한다는 점을 분명히 해야 합니다.
위 내용은 golang에서 포인터를 사용해야 하는 경우의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!