ホームページ >バックエンド開発 >Golang >Go で型アサートされたインターフェイス スライスから要素を削除するにはどうすればよいですか?

Go で型アサートされたインターフェイス スライスから要素を削除するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-19 10:21:02932ブラウズ

How to Remove Elements from Type-Asserted Interface Slices in Go?

Golang の型アサーション: インターフェイス スライスからの要素の削除

Golang では、型アサーションを使用してインターフェイス値の基になる型を抽出できます。 。しかし、型アサーションの後、基になる値をどのように操作すればよいでしょうか?

次の例を考えてみましょう。これは、型がアサートされたインターフェイスのスライスから要素を削除しようとしています。

value := []interface{}{0, "one", "two", 3, 4}
i := 2
value.([]interface{}) = append(value.([]interface{})[:i], value.([]interface{})[i+1:]...)

上記のコードでは、「値 ([]interface{}) に代入できません」というエラーが発生します。このエラーは、インターフェイスが基になる値のコピーを保存し、型アサーションがインターフェイス内の値を変更しないという事実に起因します。

解決策

基礎となる値を使用するには、代わりにスライスへのポインタをインターフェイスに保存する必要があります。例:

var value interface{} = &[]interface{}{0, "one", "two", 3, 4}

ここで、ポインタを逆参照し、次のようにスライスを変更できます。

sp := value.(*[]interface{})
i := 2
*sp = append((*sp)[:i], (*sp)[i+1:]...)

出力:

fmt.Println(value) // &[0 one 3 4]

ご覧のとおり、インデックス 2 (「two」) の要素がスライスから削除されています。このアプローチでは、インターフェイスがスライス自体のコピーではなく、スライスへのポインターを保存するため、基になる値を正常に変更できます。

以上がGo で型アサートされたインターフェイス スライスから要素を削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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