[解決済み] Goでスライスをクリアするにはどうしたらいいですか?
2022-05-07 14:15:39
質問
Goでスライスをクリアする適切な方法は何ですか?
以下は、私が見つけた フォーラム :
// test.go
package main
import (
"fmt"
)
func main() {
letters := []string{"a", "b", "c", "d"}
fmt.Println(cap(letters))
fmt.Println(len(letters))
// clear the slice
letters = letters[:0]
fmt.Println(cap(letters))
fmt.Println(len(letters))
}
これでよいのでしょうか?
明確に言うと、バッファは再利用できるようにクリアされます。
例としては バッファ.トランケート 関数があります。
Resetは単にTruncate(0)を呼び出すだけであることに注意してください。ですから、この場合、70行目で評価されるようです。 b.buf = b.buf[0 : 0] となります。
http://golang.org/src/pkg/bytes/buffer.go
// Truncate discards all but the first n unread bytes from the buffer.
60 // It panics if n is negative or greater than the length of the buffer.
61 func (b *Buffer) Truncate(n int) {
62 b.lastRead = opInvalid
63 switch {
64 case n < 0 || n > b.Len():
65 panic("bytes.Buffer: truncation out of range")
66 case n == 0:
67 // Reuse buffer space.
68 b.off = 0
69 }
70 b.buf = b.buf[0 : b.off+n]
71 }
72
73 // Reset resets the buffer so it has no content.
74 // b.Reset() is the same as b.Truncate(0).
75 func (b *Buffer) Reset() { b.Truncate(0) }
解決方法は?
それはすべて、あなたの「クリア」の定義によります。有効なものの1つは確かにそうです。
slice = slice[:0]
しかし、キャッチがある。スライス要素がT型である場合。
var slice []T
を実行すると
len(slice)
をゼロにするために、上記の"trick"を使用します。
はない
の任意の要素を作成します。
slice[:cap(slice)]
ガベージコレクションの対象となります。これは、あるシナリオでは最適な方法かもしれません。しかし、それはまた、quot;メモリリーク(使用されていないメモリですが、'slice'の再スライスの後に)到達できる可能性があり、したがって、ガベージコレクション(ゴミ収集)可能ではない)の原因かもしれません。
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] スライス表記を理解する
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] Javaで配列に特定の値が含まれているかどうかを判断するにはどうすればよいですか?
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
-
[解決済み] Javascriptで文字列の最後の文字を切り取るにはどうしたらいいですか?
-
[解決済み] JavaScriptで変数が配列であるかどうかを確認する方法は?
-
[解決済み] Swift カスタムオブジェクトの配列をプロパティ値でソートする方法
-
[解決済み】配列に何かを追加する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み] ある要素が配列に含まれているかどうかを確認する方法
-
[解決済み] Swiftでリストアイテムのインデックスを見つける方法は?
-
[解決済み】Bashでコマンドライン引数を配列に変換する。
-
[解決済み] 配列からランダムに要素を選ぶ
-
[解決済み] PostgreSQLは配列のカラムにインデックスを付けることができますか?
-
[解決済み] PowerShellで配列のすべてのオブジェクトの1つのプロパティの値を選択する
-
[解決済み] bashで$@から最初の要素を削除する [重複] [重複
-
[解決済み] groovyの配列/ハッシュ/コレクション/リストに要素があるかどうかをチェックするには?
-
[解決済み] スライスの値を表示する方法