ホームページ >バックエンド開発 >Golang >Golang スライスの設定方法

Golang スライスの設定方法

王林
王林オリジナル
2023-05-13 11:02:37569ブラウズ

Golangは近年注目を集めているプログラミング言語の一つで、高効率で同時処理能力に優れているだけでなく、習得が容易で構文が簡潔であるなど多くの利点を持っています。 Golang の重要なコンポーネントの 1 つとして、スライスは開発でよく使用されます。では、Golang でスライスを設定するにはどうすればよいでしょうか?以下で詳しく見てみましょう。

スライスとは何ですか?

Golang では、スライスは配列に似たデータ構造ですが、柔軟性と可変性がより高くなります。スライスは動的配列とみなすことができ、長さは固定されておらず、要素は自由に追加または削除できます。スライスの基礎となる構造は配列に似ていますが、固定長ではなく動的に拡張できます。

スライスの定義と使用法

Golang でスライスを定義するのは非常に簡単です。「[]」を使用して宣言するだけです。構文形式は次のとおりです:

var a []int //int 型のスライスを定義します a

次のように、組み込みの make 関数を使用して、初期容量 0 のスライスを作成することもできます。 a := make([]int , 0) //初期容量 0 の int 型スライスを作成します。

make 関数の最初のパラメーターが、対応するスライスの型であることがわかります。 2 番目のパラメータはスライスの長さ、3 番目のパラメータはスライスの容量です (オプション)。長さは現在スライスにある要素の数を表し、容量はスライスが現在格納できる要素の数を表します。

次に、次のように、append 関数を使用してスライスに要素を追加します。

a = append(a, 1) //要素 1 をスライス a

に追加します。ここでの append メソッドは Golang の組み込み関数であり、スライスに要素を追加するために使用できます。追加後、スライス a の要素は 0 から 1 に変化します。

スライスの代入とコピー

Golang では、スライスの代入とコピーは非常に簡単で、基になる配列へのポインタなので、代入やコピーの際はスライス ポインタをコピーするだけです。基になる配列のコピーを作成せずにコピーします。

以下は例です:

a := []int{1,2,3} //スライスを定義します a

b := a // a を b## に代入します#b[0] = 4 //スライス b の値を [4 2 3]

fmt.Println(a) //a の値を [4 2 3]

に出力しますa を b に代入した後、b の要素を変更すると、a の要素の値に影響を与えることがわかります。逆に、a の要素を変更すると、b の要素の値にも影響します。これは、a と b が同じ基になる配列を指しているためです。

もちろん、元の配列を変更せずにスライスをコピーする必要がある場合は、次のように copy 関数を使用してディープ コピーを作成できます。

a := []int{ 1,2, 3}

b := make([]int, len(a))

copy(b, a) //スライス a の値をスライス b

b[0] = にコピーします。 4
fmt.Println(a) //出力 a の値は [1 2 3]
fmt.Println(b) //出力 b の値は [4 2 3]

copy 関数を使用してスライス a の値をスライス b にコピーした後、b の要素を変更しても、a の要素の値には影響しないことがわかります。

スライス拡張

スライス拡張とは、スライスの容量が不十分な場合、より多くの要素を収容するために動的に拡張する必要があることを意味します。スライスの容量が不十分な場合、Golang は下部により大きなメモリ領域を再割り当てし、元のスライスの要素を新しいメモリにコピーします。

スライスが展開されると、Golang は次のルールに従って展開を試みます:

新しい長さが元の長さの 2 倍以下の場合、容量は新しいスライスの 2 倍が元の長さになります。

    それ以外の場合、新しいスライスの容量は長さに 1 を加えたものになります。
  1. 次に例を示します:
a := []int{0, 1, 2, 3 , 4, 5, 6, 7, 8, 9}

fmt.Println(len(a), cap(a)) //出力: 10 10

a = append(a , 10) //要素を追加します
fmt.Println(len(a), cap(a)) //出力: 11 20

ご覧のとおり、要素 10 をスライスに追加した後、容量は 20 に拡張され、元の長さの 2 倍になります。

概要

Golang のスライスは、配列と同様の特性を備えた非常に実用的なデータ構造ですが、より柔軟で変更可能です。スライスを使用する場合は、スライスの定義、割り当て、コピー、拡張に関する基本的な知識を理解し、実際のニーズに基づいて合理的な適用を行う必要があります。この記事の導入により、読者の皆様は Golang のスライス設定についてより深く理解できると思います。

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

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