golangの追加メソッド

WBOY
リリース: 2023-05-22 12:20:36
オリジナル
1232 人が閲覧しました

Go 言語には、基本的な配列型とスライス型に加えて、強力なスライス型のスライスもあります。スライスは動的配列とみなすことができ、その基盤となる実装も柔軟で効率的な配列です。スライスを使用する場合、多くの場合、append メソッドを使用して要素をスライスに追加する必要があります。

Go 言語のメモリ管理の仕組み

append メソッドを理解する前に、まず Go 言語のメモリ管理の仕組みを理解する必要があります。 Go 言語では、メモリはヒープとスタックの 2 種類に分類されます。一般に、スタックにメモリを割り当てると、ヒープにメモリを割り当てるよりも高速になりますが、ほとんどの場合、スタック領域は限られており、関数呼び出し時にスタック領域を割り当てると、追加のオーバーヘッドと待ち時間が発生します。

したがって、Go 言語のメモリ アロケーターは特別なメカニズムを採用しています。新しいオブジェクトがメモリを割り当てる必要がある場合、最初にスタックからメモリを割り当てようとします。割り当てが失敗した場合、ランタイム ライブラリのメモリ アロケータが呼び出され、ヒープ領域が動的に割り当てられます。このメカニズムにより、プログラムのパフォーマンスが向上し、実装がより効率的になります。

Go 言語のスライス データ型

スライスは、要素の数を柔軟に増減できる動的配列です。配列とは異なり、スライスの長さと容量は実行時に変更できます。スライスを定義するための構文は次のとおりです。

// 声明一个slice变量a
var a []int

// 通过make函数创建slice
a = make([]int, 5, 10)

// 直接初始化slice
b := []int{1, 2, 3}
ログイン後にコピー

上の例では、容量 10、長さ 5 の整数スライスが作成されます。容量パラメーターが渡されない場合、デフォルトの容量は長さと同じになります。

append メソッド

append メソッドは Go 言語に組み込まれたメソッドで、その機能は 1 つ以上の要素をスライスの末尾に追加することです。構文は次のとおりです。

append(slice []Type, elems ...Type) []Type
ログイン後にコピー

このうち、slice は追加する要素のスライス、elems は追加する要素のリストです。このメソッドは、元のスライス内のすべての要素と新しい要素を含む新しいスライスを返します。

以下は、append メソッドの使用例です:

a := []int{1, 2, 3}
a = append(a, 4, 5, 6)
fmt.Println(a) // [1 2 3 4 5 6]
ログイン後にコピー

上の例では、3 つの要素を含む整数スライス a を定義し、最後に 4、5、および 3 つの要素を追加します。 6.最終的な出力結果は [1 2 3 4 5 6] です。

append メソッドを使用する場合、容量が不十分な場合、Go 言語はより大きな容量を持つ基になる配列を再割り当てし、元の要素を新しい配列にコピーすることに注意してください。容量が十分な場合、append メソッドは元の基になる配列の末尾に要素を直接追加します。

実際には、スライスの容量は append メソッドで内部的に自動的に調整されるため、通常は基になる配列の容量について心配する必要はありません。ただし、メモリ割り当ての削減やプログラム効率の向上など、特別な最適化を実行する必要がある場合は、基礎となる配列の容量を手動で調整する必要があります。

スライスを操作するためのポインタ

スライスは、Go 言語のポインタを介して操作されます。要素をスライスに追加すると、基礎となる配列が再割り当てまたはコピーされ、基礎となるポインタが変更される場合があります。したがって、スライスを使用するときは、基になるポインタの変更に注意する必要があります。

以下はスライス ポインタの例です:

a := []int{3, 4, 5}
b := a[:2] // b是a的前两个元素
c := append(b, 6)
fmt.Println(a) // [3 4 6]
fmt.Println(b) // [3 4]
fmt.Println(c) // [3 4 6]
ログイン後にコピー

上の例では、整数スライス a を定義し、a の最初の 2 要素を別のスライス b に割り当てます。次に、要素 6 を b に追加し、新しいスライス c を取得します。最後に、スライス a、b、c の要素をそれぞれ出力します。スライス a と b の要素が変更されており、新しいスライス c には元のスライス a と要素を追加した後の新しい配列が含まれていることがわかります。

スライスの基礎となる配列が共有されることに注意してください。したがって、スライスの要素を変更すると、同じ基礎となる配列を使用する他のスライスに影響を与える可能性があります。

まとめ

Go言語において、スライスを操作する際にappendメソッドは欠かせないツールです。 append メソッドを使用すると、要素をスライスに追加し、基になる配列の容量を自動的に調整できます。スライスを使用する場合は、基になるポインタの変更に注意し、スライスの基になる配列は共有されるため、要素を変更するときは注意してください。

以上がgolangの追加メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート