Go スライス式 s[lo:hi] は要素を含むスライスを作成しますインデックス lo からインデックス hi-1 まで。この動作は、いくつかの設計原則によって説明されます。
Go では、スライスは基になる配列へのポインターとして実装されます。 0 から始まるインデックスの配列と包含/排他的スライスを使用すると、簡単なポインター演算が可能になります。スライス内のインデックス i の要素は、スライスのポインタが指す要素に i を加えたものです。
Go スライスの長さは、スライスする位置でもありますそれ。これは、arr[0:len(arr)] が arr 自体を返すことを意味します。このプロパティは、読み取りまたは書き込み操作の後にスライスからデータを抽出する場合に便利です。
包含/排他的スライスにより、配列の連続したサブスライスが重複しないことが保証されます。たとえば、arr = [1, 2, 3, 4] の場合、arr[0:2] = [1, 2]、arr[2:4] = [3, 4]、および arr[0:4] = 編このプロパティは、サブスライスの分割または操作を必要とする操作を簡素化します。
次の Go コードを考えてみましょう。
func consecutiveSlices(ints []int) [][]int { ret := make([][]int, 0) i, j := 0, 1 for j < len(ints) { if ints[j] != ints[j-1] + 1 { ret = append(ret, ints[i:j]) i = j } } ret = append(ret, ints[i:j]) return ret }
この関数は、整数のスライスを次のように分割します。各要素とその前の要素との差に基づく連続したサブスライス。包含-排他的スライシング手法を使用すると、包含-包含スライシングを使用する場合と比較して、よりシンプルで効率的な実装が可能になります。
以上がGo の `s[lo:hi]` スライスがインデックス `hi` の要素を除外するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。