포인터의 기본 의미는 특정 값이 저장되는 메모리 주소입니다. ㅋㅋㅋ (권장 학습: 이동 )
Golang에서는 모든 값이 주소를 꺼낼 수는 없지만(const와 같이 메모리에도 저장되지만) 모든 변수는 확실히 주소를 꺼낼 수 있습니다. 변수는 메모리 영역[1]에 저장되는 값입니다. 익숙한 var x int의 x는 변수일 뿐만 아니라, SliceA[0], mapB["key"] 및 structC.FieldD와 같은 더 복잡한 표현식도 변수를 나타낼 수 있습니다. 즉, 각각 고유한 포인터를 가질 수 있습니다.구조체의 변수 내용을 수정해야 하는 경우, 메소드에 의해 전달된 구조 변수 매개변수는 맵에서 구조의 변수를 수정해야 하는 경우 구조체의 주소인 포인터를 사용해야 합니다. , 주소는 맵의 값 역할도 해야 합니다.
Go는 새로운 구조체 포인터를 직접 생성할 수 있습니다
golang에서는 ptr := &A{Value: 1};을 통해 구조체 A의 값에 대한 포인터를 얻을 수 있지만 C에서는 별도의 The를 전달할 수 없습니다. 할당문의 내용은 다음과 같습니다.typedef struct { int value; } A;A *ptr1; // 无法给 ptr 所指的值赋值 A *ptr2 = &A{1}; // 没有这样的语法 A a = {1}; // 再通过 &a 可以得到指针이 차이점이 단지 문법적인 외관일 뿐이라면 버그와 관련된 또 다른 차이점이 있을 수 있습니다.
2 Go에서 지역 변수에 대한 포인터를 반환하는 것이 안전합니다
위의 C 코드 예에서는 실제로 일부 변수를 선언할 수 있지만 이러한 선언이 다음과 같은 메서드 내에서 수행되는 경우:A *init(){ A *ptr; return ptr;}또는
A *init(){ A a; return &a;}그러면 이 선언된 지역 변수는 자동 변수입니다(자동 변수[3]). 원래 메서드인 init() 메서드 이후에는 이러한 자동 변수가 "사라집니다".
위 내용은 Golang 포인터를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!