Goの値渡し

Golangが選択したブログ投稿の翻訳倉庫の
元のアドレス

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;
}

あなたが見ることができるようにabc同じメモリアドレスへのすべてのポイントは、あなたが異なる範囲で参照変数(つまり、関数呼び出し)を宣言したい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
}

この例では、bc持っている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がないことがわかりますので、参照はありません。

地図って何?次の記事はそれを明らかにします。

おすすめ

転載: www.cnblogs.com/Jun10ng/p/12723409.html