>  기사  >  백엔드 개발  >  Go의 \"new()\" 함수와 \"&\" 메모리 주소 연산자의 차이점은 무엇인가요?

Go의 \"new()\" 함수와 \"&\" 메모리 주소 연산자의 차이점은 무엇인가요?

Patricia Arquette
Patricia Arquette원래의
2024-10-23 13:58:02389검색

What's the Difference Between the

new()와 "&" 연산자의 차이점

Go에서는 new() 함수와 "&" 메모리 주소 연산자는 둘 다 메모리를 할당하는 데 사용됩니다. 그러나 사용법에는 약간의 미묘한 차이가 있습니다.

기능 비교

new()와 & 연산자는 모두 새로 할당된 메모리 주소에 대한 포인터를 반환합니다. 그러나 구문은 다릅니다.

  • v := &Vector{}는 "&" 연산자를 사용하여 빈 Vector 구조체의 주소를 얻습니다.
  • v := new( Vector)는 new() 함수를 사용하여 새 Vector 구조체에 대한 포인터를 만듭니다.

유형 분석

제공된 코드 예제에서 볼 수 있듯이 리플렉션은 분석에 따르면 &Vector{}와 new(Vector)는 둘 다 Vector 구조체의 인스턴스에 대한 포인터이므로 동일한 유형의 포인터를 반환합니다.

역사적 혼란

Go 메일링 리스트에서는 이전에 new()와 & for 메모리 할당에 대한 우려를 논의한 바 있는데, 이는 혼란을 초래할 수 있기 때문입니다.

특수 사례

주목할 가치가 있습니다. new()는 정수와 같이 명명되지 않은 기본 유형에 대한 포인터를 얻는 유일한 방법입니다. 이는 다음 예에서 볼 수 있습니다.

p := new(int) // valid
p := &int{0} // invalid

기본 설정 및 사용법

결국 메모리 할당에 new()를 사용할 것인지 &를 사용할 것인지 선택하는 것은 크게 개인 취향의 문제. 두 방법 모두 동일한 기능을 가지며 동일한 결과를 생성합니다. 하지만 두 연산자의 미묘한 차이점을 인지하고 구체적인 요구사항에 따라 적절하게 사용하는 것이 중요합니다.

위 내용은 Go의 \"new()\" 함수와 \"&\" 메모리 주소 연산자의 차이점은 무엇인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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