>백엔드 개발 >Golang >Go의 '*' 수정자: 값별 전달 또는 참조별 전달?

Go의 '*' 수정자: 값별 전달 또는 참조별 전달?

Barbara Streisand
Barbara Streisand원래의
2024-12-27 00:53:09216검색

Go's

Go에서 참조 및 값 전달: "*" 수정자 이해

함수 간에 데이터를 전달하는 것은 프로그래밍의 기본 측면입니다. . Go에서는 이를 수행하는 두 가지 주요 방법이 있습니다: 값으로 전달 또는 참조로 전달. 후자는 "*" 수정자를 사용하므로 초보자에게는 혼란스러울 수 있습니다.

Java에서는 객체가 본질적으로 참조로 전달되므로 참조로 객체를 전달하는 것은 간단합니다. 하지만 값에 의한 전달과 참조에 의한 전달을 모두 허용하는 Go에서는 포인터를 사용하는 것이 더 효율적일 수 있습니다.

""은 유형에 대한 포인터를 나타냅니다. 예를 들어 func PutTasks(db sql.DB)는 db 매개 변수가 sql.DB 개체에 대한 포인터임을 나타냅니다. 그 이유는 Go가 기술적으로 값에 의한 전달만 지원하고, 포인터를 전달하는 것은 참조에 의한 전달을 시뮬레이션하는 방법이기 때문입니다.

포인터를 전달하면 값( 포인터 자체) 메모리의 실제 객체를 가리키는 포인터입니다. 이는 포인터를 통해 객체에 적용된 변경 사항이 함수에 전달된 원래 변수에 반영된다는 의미입니다. 반면에 "*" 없이 값을 직접 전달하면 원래 값의 복사본이 만들어지므로 함수에서 변경한 내용이 원래 변수에 영향을 주지 않습니다.

제공된 예, func PrintPerson( p *Person), 세부 정보를 인쇄하려면 Person 객체를 수정해야 하기 때문에 포인터가 필요합니다. 대신 값을 받은 경우 모든 변경 사항은 함수 내에 있는 복사본에만 영향을 미칩니다.

Go에서 효과적인 코드를 작성하려면 참조에 의한 전달과 값에 의한 전달을 이해하는 것이 중요합니다. 적절한 경우 포인터를 사용하면 성능을 향상시키고 함수와 호출자 코드 간의 일관성을 유지할 수 있습니다.

위 내용은 Go의 '*' 수정자: 값별 전달 또는 참조별 전달?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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