Go 言語のスライスと変数の違いを理解する

王林
リリース: 2024-04-02 18:42:01
オリジナル
398 人が閲覧しました

Go 言語ではスライスと変数は異なります。スライスは基になる配列を参照する参照型であるのに対し、変数は値を直接保存します。変数への代入では新しいコピーが作成され、スライスへの代入では同じ配列を指す新しいスライスが作成されます。スライスは参照を使用するため、1 つのスライスを変更すると、同じ配列を参照する他のスライスに影響を与える可能性がありますが、変数は影響を受けません。

Go 言語のスライスと変数の違いを理解する

Go 言語のスライスと変数の違いを理解する

Go 言語のスライスは、基になる配列を指すことができる参照型です。これは、値を直接保存する変数とは異なります。

スライス

スライスは 3 つの部分で構成されます。

  • ポインタ: 基礎となる配列の開始位置を指します。
  • Length: 長さスライス内の要素の数 Number
  • Capacity: スライスの基になる配列で使用可能な要素の数
mySlice := []int{1, 2, 3} // 创建一个整型切片,包含元素 1、2 和 3
ログイン後にコピー

Variables

変数には値が格納されます。基礎となるデータ構造を参照するのではなく、直接参照します。

myVar := 1 // 创建一个整型变量,值为 1
ログイン後にコピー

違い

1.代入

変数に値を代入すると、変数の新しいコピーが作成されます:

var1 := 1
var2 := var1

var1 = 2 // 修改 var1 的值

fmt.Println(var1, var2) // 输出:2 1
ログイン後にコピー

And slicing 割り当てを行うと、同じ基になる配列を指す新しいスライスが作成されます:

slice1 := []int{1, 2, 3}
slice2 := slice1

slice1[0] = 4 // 修改 slice1 中的元素

fmt.Println(slice1, slice2) // 输出:\[4 2 3\] \[4 2 3\]
ログイン後にコピー

2. メモリ管理

変数は値を直接保存するため、割り当て新しい変数は他の変数に影響を与えません。スライスは参照を使用するため、スライスを変更すると、同じ基礎となる配列を参照する他のスライスに影響を与える可能性があります。

3. 関数への渡し

変数は値として関数に渡され、スライスは参照として関数に渡されます。これは、関数はスライスを変更できますが、変数は変更できないことを意味します。

実践的なケース

スライスを受け入れてソートする関数を考えてみましょう。変数 numsresult は、同じ基になる配列を参照している場合でも、2 つの異なるスライスとして扱われます。

rree

以上がGo 言語のスライスと変数の違いを理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート