タイプがアサートされたインターフェイスのスライスから要素を削除する
Go でインターフェイスのスライスを操作する場合、内部の要素を削除または変更する必要がある場合があります。彼ら。ただし、型がアサートされたスライスに直接代入すると、「値に代入できません。([]インターフェイス {})」というエラーが発生する可能性があります。
このエラーは、インターフェイス値にラップされた値のコピーが含まれているために発生します。それへの言及ではありません。したがって、インターフェイス値を変更しようとすると、コピーにのみ影響し、元のスライスには影響しません。
インターフェイスの型がアサートされたスライスから要素を削除するには、代わりにインターフェイスにスライス ポインターを格納する必要があります。これにより、実際のスライスであるポイントされた値を変更できるようになります。
次の例を考えてみましょう:
s := []interface{}{0, "one", "two", 3, 4} var value interface{} = &s // Remove the element at index 2 ("two") sp := value.(*[]interface{}) i := 2 *sp = append((*sp)[:i], (*sp)[i+1:]...) fmt.Println(value)
このコードでは、インターフェイス値 value には代わりにスライス ポインタ &s が割り当てられます。スライス自体の。次に、型アサーションはインターフェイスからスライス ポインタを取得します。逆参照された値 *sp を変更すると、元のスライスが更新されます。
出力は &[0 one 3 4] となり、スライスから「two」が削除されたことが確認できます。この手法により、型がアサートされたインターフェイスのスライスを安全かつ効果的に変更できます。
以上がGo でタイプアサートされたインターフェイスのスライスから要素を削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。