ホームページ >バックエンド開発 >Golang >Go でスライスを設定する方法

Go でスライスを設定する方法

PHP中文网
PHP中文网オリジナル
2023-03-29 15:10:11679ブラウズ

Go 言語は静的型付け言語であるため、開発中に多数のスライス操作が行われます。スライスは、特定の長さの要素のシーケンスを格納できるコンテナーであり、その長さは実行時に動的に拡張または縮小できます。この記事では、Go でスライスを設定する方法を説明します。

1. スライスを作成する
Go では、make() 関数を使用してスライスを作成できます。 make() 関数には、スライス タイプとスライス長の 2 つのパラメータが必要です。たとえば、長さ 5 の整数型スライスを作成するには、次のように記述します。

slice := make([]int,5)

ストレージ領域が割り当てられた整数型スライスが必要な場合は、次のメソッドを使用できます。

array := [5]int{1,2,3,4,5}
slice := array[1:4]

ここでの配列は 5 つの整数要素を含む配列であり、スライスは配列の 2 番目の要素から 4 番目の要素までのスライスです。 len() 関数を使用してスライスの要素数を取得し、cap() 関数を使用してスライスの現在の最大容量を取得できます。

2. スライスの拡張
スライスに格納されている要素の数が現在の最大容量を超えると、スライスは自動的に拡張されます。拡張中、スライスの長さは 2 倍になり、容量は 3 倍になります。例えば、長さ10、容量20のスライスを再度拡張すると、スライス長は20、容量は40になります。

Go のスライスは動的に拡張されますが、スライスの長さを毎回 2 倍にできるわけではありません。そうすると、連続したメモリ領域が不足する可能性があります。現在のメモリを拡張できない場合、新しいメモリ ブロックが再割り当てされ、元の要素が新しいメモリ ブロックにコピーされますが、これはリソースを大量に消費する操作です。

3. スライスとスプライシング
Go 言語では、スライスとスプライシングの操作が非常に一般的です。 append() 関数を使用して、1 つ以上のスライスを結合できます。 append() 関数は可変パラメータ関数であり、各パラメータは接続される 1 つ以上のスライスになります。

たとえば、長さ 3 の 2 つのスライスを長さ 6 のスライスに結合したいとします。これは次のように記述できます。

slice1 := []int{1,2,3}
slice2 := []int{4,5,6}
slice3 := append(slice1,slice2...)

スライスが渡されたことに注意してください。 append() 関数にそれらは同じタイプでなければなりません。そうでない場合、それらは結合されません。さらに、初期化されていないスライスは append() 関数を直接使用できないため、最初に make() 関数を使用して初期化する必要があります。

4. スライスのコピー
Go 言語では、copy() 関数を使用してスライスをコピーできます。 copy() 関数は、あるスライスの要素を別のスライスにコピーできます。通常、あるスライスの要素を別のスライスにコピーするために使用されます。 copy() 関数の最初のパラメータはターゲット スライスで、2 番目のパラメータはソース スライスです。たとえば、長さ 5 のスライスを別のスライスにコピーする場合は、次のように記述できます。

slice1 := []int{1,2,3,4,5}
slice2 := make([]int,5)
copy(slice2,slice1)

上記のコードでは、スライス 2 はスライス 1 の要素をコピーします。ターゲットのスライスは make() 関数を使用して初期化する必要があることに注意してください。初期化しないと、コピー操作が不可能になります。

概要:
スライスは Go 言語の非常に重要なデータ型であり、さまざまなシナリオで広く使用されています。この記事では、スライスの作成方法、拡張方法、継ぎ合わせやコピーの方法を簡単に紹介します。スライス操作では、メモリの使用状況と境界問題の防止に注意する必要があります。

以上がGo でスライスを設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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