>  기사  >  백엔드 개발  >  golang에서 포인터를 사용해야 하는 경우

golang에서 포인터를 사용해야 하는 경우

(*-*)浩
(*-*)浩원래의
2019-12-27 11:25:104670검색

golang에서 포인터를 사용해야 하는 경우

가끔 다른 사람의 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.