スライス タイプを変換できない理由
提供されたコード セグメントのように、あるタイプのスライスを別のタイプに変換しようとする場合, Goではエラーが発生します。このエラーは、Go 仕様で定義されている特定の型変換ルールが原因です。
このエラーは、スライスの基になる型がその要素の基になる型に直接関連していないために発生します。 Foo と Bar の基になる型は同一ですが、Foo 要素と Bar 要素を含むスライスの基になる型は異なります。
Go の代入性ルールによれば、[]Foo 型の値を型の変数に割り当てることはできません。 []バー。この不一致により、変換エラーが発生します。
この問題を解決するには、中間データ構造を通じて変換を実行できます。たとえば、次のコードは機能します:
<code class="go">type Foo struct{ A int } type Bars []Foo func main() { foos := []Foo{Foo{1}, Foo{2}} bars := Bars(foos) fmt.Println(bars) } </code>
出力:
[{1} {2}]
さらに、unsafe パッケージを使用すると、型の安全性チェックがバイパスされ、変換が可能になります。ただし、安全でないパッケージは慎重に使用し、パフォーマンスと複雑さが重要な問題となる例外的な場合にのみ使用する必要があります。
以上がGo で異なる要素タイプのスライス間を直接変換できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。