goには参照変数がないため、値への参照がないことを明確にしましょう。
参照変数とは何ですか?
C ++のような言語では、エイリアスを宣言して変数に別の名前を付けることができます。これを参照変数と呼びます。
#include <stdio.h>
int main() {
int a = 10;
int &b = a;
int &c = b;
printf("%p %p %p\n", &a, &b, &c); // 0x7ffe114f0b14 0x7ffe114f0b14 0x7ffe114f0b14
return 0;
}
あなたが見ることができるようにa
、b
、c
同じメモリアドレスへのすべてのポイントは、あなたが異なる範囲で参照変数(つまり、関数呼び出し)を宣言したい3の値は、この機能は便利です。
goには参照変数はありません
C ++とは異なり、goの各変数には一意のメモリアドレスがあります。
package main
import "fmt"
func main() {
var a, b, c int
fmt.Println(&a, &b, &c) // 0x1040a124 0x1040a128 0x1040a12c
}
メモリを共有するgoプログラムで2つの変数を見つけることはできませんが、2つの変数が同じメモリを指すようにすることができます。
package main
import "fmt"
func main() {
var a int
var b, c = &a, &a
fmt.Println(b, c) // 0x1040a124 0x1040a124
fmt.Println(&b, &c) // 0x1040c108 0x1040c110
}
この例では、b
とc
持っているa
アドレスを、しかし、b
およびc
これら2つの変数が変化し、異なるメモリアドレスに格納されていたb
値は影響を与えませんc
。
map
そしてそれchannel
は引用されていますか?
いいえ、マップもチャネルも参照ではありません。参照されている場合、次の例ではfalse
package main
import "fmt"
func fn(m map[int]int) {
m = make(map[int]int)
}
func main() {
var m map[int]int
fn(m)
fmt.Println(m == nil)
}
参照変数の場合、main
途中m
から途中に渡さfn
れ、関数による処理m
は初期化されているはずですがfn
、処理m
に影響map
がないことがわかりますので、参照ではありません。
地図って何?次の記事はそれを明らかにします。