01. はじめに Golang の同じ古いスライス構文は a
、あなたはおそらく目覚めています。 a を信じて、他のすべての スライス構文 が存在する可能性があります。
、これは 2 つの代わりに 3 つのインデックスを取ります。 3 番目のインデックス max は何を作りますか? ラベル: Python スライス構文の step インデックスではなくなりました a[low:high:step]
. 返信: 3つ目のインデックスはスライスのポテンシャルを設定するためのものです! Golang仕様では「ファットスライス式」と呼んでいます。
02. Golang スライスの決定なぜこれが Golang に追加されたのか、そしてそれがどのようにうまくいくのかを理解するために、配列とポインタを使って配信しましょう.
範囲外エラーは C 関数では古典的であり、Golang は組み込みの実行時境界チェッカーを使用してこのトレインを軽減します。 Golang 配列はマウントされた次元であるため、配列の境界チェックは簡単ですが、ポインターの境界が明示的に定義されていないため、ポインターの境界チェックはそれほど簡単ではありません。 Golang のスライスは、ポインターの境界チェックに対する正しい解決策の 1 つです。 配列へのエントリを受け入れるための否定できないポインターの使用の代わりとして成分、Golang はディメンション フィールドでポインターを増強します。 結果 (次元を持つポインター) は、「スライス」または「ファット ポインター」と呼ばれます。 スケール フィールドを使用すると、実行時の境界チェックが簡単になります。 Golang スライスは、次元を持つポインターが正しくありません。動的に割り当てられた配列を増やすことは、そのような古典的な仕事であるため、「潜在的な」フィールド。 また、スライスのポテンシャルは、スライス式の境界チェッカーとしても機能します a
— スライスの中断は、その可能性を超えることはできません。 03. a[low:high:max] スライスのインデックス式は境界です-スケールフィールドによってチェックされ、スケールフィールドは、指定された境界チェックを形成するためにカットすることによってさらに減少する可能性があります. 同様に、スライス式の境界テストを強化するためにスライスの可能性を減らすことも考えられる方法であれば、ショックを受けるかもしれません a
。 例として、次の式はスライスの可能性をその次元に縮小します:
この後、スライス a
はそれ自体に限定されているため、誤って再スライスしたり append
してください。不変配列からのスライス。 不変と思われるスライスに誤って 追加 した場合、コピーが強制され、情報は上書きされません。 このスライス式の考え方は、Golang では「脂肪スライス式」として知られています 仕様。
![a[low:high:max] in Golang – まれなリデュース トリック](https://nasa.re/file/2023/03/9481-alowhighmax-in-golang-e381bee3828ce381aae383aae38387e383a5e383bce382b9-e38388e383aae38383e382af.png)