golang における配列とスライスの違い:
● スライスはポインタ型、配列は値型です
●配列 長さは固定されていますが、スライスは固定されていません (スライスは動的配列です)
#● スライスには配列よりも 1 つ多くの属性があります: 容量 (キャップ)#● スライスの最下層は配列
関連する推奨事項:
golang チュートリアル一方はポインター型で、もう一方は値型ですが、違いはどこにあるのでしょうか?
この例を見てください
numbers := []int{1, 2, 3, 4, 5, 6} for i, e := range numbers { if i == len(numbers)-1 { numbers[0] += e } else { numbers[i+1] += e } } fmt.Println(numbers)
結果は次のとおりです:
[22 3 6 10 15 21]
スライスを配列に置き換えます:
numbers := [...]int{1, 2, 3, 4, 5, 6} for i, e := range numbers { if i == len(numbers)-1 { numbers[0] += e } else { numbers[i+1] += e } } fmt.Println(numbers)
結果は次のとおりです:
[7 3 5 7 9 11]
それは明らかです: トラバース後、配列内の各要素は現在の要素と前の要素の合計になります。スライスの場合も同じことが当てはまりますが、各要素は前の要素の変更された値と前の要素の合計になる点が異なります。現在の要素と。
分析: for ループ中、数字の要素は {1,2,3,4,5,6} です。 for ループを受け取る変数は i と e で、i は両方とも [0,1,2,3,4,5] です。しかし、e は異なり、配列は値によって渡されるため、配列をトラバースするとき、e は {1,2,3,4,5,6} になります。スライスではポインターが渡されるため、累積されるたびに、変更された値は次のようになります。蓄積された。
以上がgolangの配列とスライスの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。