Go 언어에는 참조 전달 기능이 없습니다. Go 언어에는 참조 변수가 없습니다. 프로그램에 정의된 각 변수는 고유한 메모리 위치를 차지하므로 Go 언어는 동일한 메모리 위치를 공유하는 두 개의 변수를 만들 수 없습니다.
이 글의 환경: Windows 10 시스템, Go 1.11.2 버전, 이 글은 모든 브랜드의 컴퓨터에 적용됩니다.
(학습 영상 공유: 프로그래밍 영상)
우선 Go에는 참조 변수가 없으므로 Go 언어에서 함수를 호출할 때 참조 전달이 없다는 점을 분명히 해야 합니다.
참조변수란 무엇인가요?
일부 개발 언어(예: C++)에서는 기존 변수에 대해 별칭을 선언할 수 있습니다. 이 별칭을 참조 변수라고 합니다.
1#include <stdio.h> 2 3int main() { 4 int a = 10; 5 int &b = a; 6 int &c = b; 7 8 printf("%p %p %p\n", &a, &b, &c); // 0x7ffe114f0b14 0x7ffe114f0b14 0x7ffe114f0b14 9 return 0; 10}
a, b, c가 모두 동일한 메모리 위치를 가리키는 것을 볼 수 있습니다. a에 쓰는 것은 b와 c에 영향을 줍니다. 이는 다른 범위에서 참조 변수를 선언하려는 경우, 즉 함수가 호출될 때 유용합니다.
Go 언어에는 참조 변수가 없습니다.
C++와 달리 Go 프로그램에 정의된 각 변수는 고유한 메모리 위치를 차지합니다.
1package main 2 3import "fmt" 4 5func main() { 6 var a, b, c int 7 fmt.Println(&a, &b, &c) // 0x1040a124 0x1040a128 0x1040a12c 8}
동일한 메모리 위치를 공유하는 두 개의 변수를 만드는 것은 불가능합니다. 동일한 메모리 위치를 가리키는 두 개의 변수를 생성하는 것이 가능하지만 이는 동일한 메모리 위치를 공유하는 두 개의 변수와는 다릅니다.
1package main 2 3import "fmt" 4 5func main() { 6 var a int 7 var b, c = &a, &a 8 fmt.Println(b, c) // 0x1040a124 0x1040a124 9 fmt.Println(&b, &c) // 0x1040c108 0x1040c110 10}
위 코드에서 b와 c는 모두 같은 값, 즉 변수 a의 주소를 가지지만 a와 c는 메모리의 다른 위치에 저장됩니다. b의 내용을 변경해도 c에는 영향을 미치지 않습니다.
지도와 채널은 참고사항인가요?
틀렸어요! map과 채널이 참조가 아닌 경우 다음 코드는 false를 출력합니다.
map m이 C++ 스타일 참조 변수인 경우 main()에 선언된 m과 fn()에 선언된 m은 동일한 메모리 공간을 공유합니다. 그러나 fn()에서 m에 값을 할당해도 main()에서는 m에 영향을 미치지 않으므로 map은 참조 변수가 아님을 알 수 있습니다.
요약
Go에는 참조 변수가 없기 때문에 참조로 전달되지 않습니다.
관련 추천: golang 튜토리얼
위 내용은 Go 언어에는 참조로 전달이 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!