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 サイトの他の関連記事を参照してください。