>백엔드 개발 >Golang >Golang 포인터를 사용하는 방법

Golang 포인터를 사용하는 방법

(*-*)浩
(*-*)浩원래의
2019-12-31 13:41:082509검색

Golang 포인터를 사용하는 방법

포인터의 기본 의미는 특정 값이 저장되는 메모리 주소입니다. ㅋㅋㅋ                                                                                              (권장 학습: 이동 )

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

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