Go言語には参照渡しはありますか?

青灯夜游
リリース: 2022-12-20 12:09:35
オリジナル
5390 人が閲覧しました

######いいえ。 Go には参照変数がないため、Go 言語で関数を呼び出すときに参照を渡すことはありません。 Go プログラムで定義されたすべての変数は、一意のメモリ位置を占有します。同じメモリ位置を共有する 2 つの変数を作成することはできません。同じメモリ位置を指す 2 つの変数を作成することはできますが、これは同じではありません。 2 つの変数が同じメモリを共有しており、場所が異なります。

Go言語には参照渡しはありますか?このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。

Go には参照変数がないため、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 がすべて同じメモリ位置を指していることがわかります。 a への書き込みは b と c に影響します。これは、別のスコープで参照変数を宣言する場合、つまり関数が呼び出される場合に便利です。

Go 言語には参照変数がありません

C とは異なり、Go プログラムで定義された各変数は一意のメモリ位置を占有します。

package main

import "fmt"

func main() {
        var a, b, c int
        fmt.Println(&a, &b, &c) // 0x1040a124 0x1040a128 0x1040a12c
}
ログイン後にコピー

同じメモリ位置を共有する 2 つの変数を作成することはできません。同じメモリ位置を指す 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 のアドレスを持ちますが、a と c はメモリ内の異なる場所に格納されます。 b の内容を変更しても c には影響しません。

マップとチャネルは参照変数である必要がありますね。 #########間違っている!マップとチャネルは参照ではありません。参照である場合、次のコードは 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)
}
ログイン後にコピー
map m が C スタイルの参照変数の場合、main() で宣言された m と fn() で宣言された m は同じメモリ空間を共有します。ただし、 fn() で m に値を代入しても main() の m には影響しないため、map は参照変数ではないことがわかります。

概要

Go には参照変数がないため、Go は参照渡しを行いません。

【関連する推奨事項: Go ビデオ チュートリアル

プログラミング教育

以上がGo言語には参照渡しはありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!