"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go의 \"new()\" 함수와 \"&\" 메모리 주소 연산자의 차이점은 무엇인가요?

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

2024-11-08에 게시됨
검색:493

What\'s the Difference Between the \

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

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

기능 비교

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

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

유형 분석

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

역사적 혼란

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

특수 사례

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

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

기본 설정 및 사용법

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

릴리스 선언문 이 글은 1729661717에서 재인쇄되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3