ホームページ  >  記事  >  バックエンド開発  >  golangの配列とスライスの違いは何ですか?

golangの配列とスライスの違いは何ですか?

青灯夜游
青灯夜游オリジナル
2019-12-25 18:02:463448ブラウズ

golangの配列とスライスの違いは何ですか?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。