golang では、スライス長はスライス内の要素の数です。スライス容量は、スライスが作成されたインデックスから始まる、つまり最初から数えた基になる配列内の要素の数です。スライスの要素を最下層に移動する 配列の末尾の要素の数。スライスの長さと容量を計算できます。組み込みメソッド len() で長さを取得でき、cap() で容量を取得できます。スライスを使用するプロセスで、append() を使用してスライスを作成する場合、スライスの長さがスライスの容量より大きい場合、スライスの容量は自動的に 2 倍に拡張されます。
このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。
Go 言語スライスには長さと容量があります。
スライスの長さはスライス内の要素の数です
スライスの容量は基礎となる配列内にありますスライスが作成されたインデックスから始まり、最初の要素から基礎となる配列要素の最後まで数えた要素の数。
スライスはインデックス付け可能であり、長さは len() メソッドで取得できます。スライスには、スライスがどのくらいの長さを維持できるかを測定できる、容量を計算するためのメソッド cap() が用意されています。 。スライスを使用する場合、append を使用してスライスの長さをスライスの容量より大きくすると、スライスの容量は自動的に 2 倍の形で拡張されます。
スライスは実際には配列の特定の部分を取得します。len スライス
cap() の結果によってスライス インターセプトの詳細が決まります
var sTest01 []int func sliceTest01() { fmt.Printf("%T \n cap(sTest01) = %v \n", sTest01, cap(sTest01)) sTest01 = append(sTest01, 1, 2, 3, 4, 5, 6) fmt.Printf("%T \n cap(sTest01) = %v \n", sTest01, cap(sTest01)) }
実行結果:
[]int cap(sTest01) = 0 []int cap(sTest01) = 6
最初はスライスの長さが 0 で、要素を追加した後の実際の長さは 6
#配列が値型でスライスが参照型であることを証明する例:
func sliceTest02() { x := [...]int{1, 2, 3, 4, 5, 6} y := []int{100, 200, 300, 400} w := x z := y w[0] = 777 z[0] = 999 fmt.Println("x = ", x, "\nw = ", w) fmt.Println("y = ", y, "\nz = ", z) }
x = [1 2 3 4 5 6] w = [777 2 3 4 5 6] y = [999 200 300 400] z = [999 200 300 400]
func sliceCap() { arr := [...]string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"} fmt.Println("cap(arr) = ", cap(arr), arr) //截取数组,形成切片 s1 := arr[2:8] fmt.Printf("%T \n", s1) fmt.Println("cap(s1) = ", cap(s1), s1) //截取数组,形成切片 s2 := arr[4:7] fmt.Printf("%T \n", s2) fmt.Println("cap(s2) = ", cap(s2), s2) //截取数组,形成切片 s3 := s1[3:9] fmt.Printf("%T \n", s3) fmt.Println("cap(s3) = ", cap(s3), s3) //截取数组,形成切片 s4 := s2[4:7] fmt.Printf("%T \n", s4) fmt.Println("cap(s4) = ", cap(s4), s4) //证明切片是引用类型 s4[0] = "x" fmt.Println(arr, s1, s2, s3, s4) }
cap(arr) = 11 [a b c d e f g h i j k] []string cap(s1) = 9 [c d e f g h] []string cap(s2) = 7 [e f g] []string cap(s3) = 6 [f g h i j k] []string cap(s4) = 3 [i j k] [a b c d e f g h x j k] [c d e f g h] [e f g] [f g h x j k] [x j k]
Golang では、len が 0 であるが cap が 0 ではない、または両方が 0 であるスライスを許可するため、一般にスライスの長さは直接ではなく、len を通じて取得され、空のスライスであるかどうかが判断されます。スライスと nil を合計すると、直接比較が行われます。【関連する推奨事項:
以上がgolang スライスの長さと容量はどれくらいですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。