>  기사  >  백엔드 개발  >  Go 언어에는 참조로 전달이 있나요?

Go 언어에는 참조로 전달이 있나요?

王林
王林원래의
2020-12-17 14:02:492015검색

Go 언어에는 참조 전달 기능이 없습니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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