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

Go でタイプアサートされたインターフェイスのスライスを変更するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-24 22:29:11198ブラウズ

How to Modify Type-Asserted Slices of Interfaces in Go?

Go でのインターフェイスの型アサートされたスライスの操作

Golang では、型アサーションにより、開発者はインターフェイス値の基礎となる具体的な型にアクセスできます。 。ただし、型アサーションは元のインターフェイス値を変更しないことに注意することが重要です。これは、型がアサートされたインターフェイスのスライスから要素を削除しようとするときに問題になる可能性があります。

次の例を考えてみましょう。

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

type Assertion:

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

「値に代入できません (type []interface {})」というエラーが発生します。これは、型アサーションが元の値のコピーを作成し、コピーに加えられた変更が元の値に影響を与えないためです。

この問題に対処するには、型ではなく、基になるインターフェイスのスライスを変更する必要があります。主張されたコピー。これは、スライスをインターフェイス ポインタでラップすることで実現できます:

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

ポインタを使用すると、基になるスライスを変更できます:

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

この場合、変更は指定されたスライスは元のインターフェイス値に反映されます:

fmt.Println(value)
// Output: [*[]interface {0 one 3 4}]

インターフェイス ポインターを利用することで、開発者は型アサートされた操作を行うことができます。割り当てエラーが発生することなくインターフェイスのスライスを作成できます。

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

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