ホームページ  >  記事  >  バックエンド開発  >  Go で異なる要素タイプのスライス間を直接変換できないのはなぜですか?

Go で異なる要素タイプのスライス間を直接変換できないのはなぜですか?

DDD
DDDオリジナル
2024-10-25 17:32:02278ブラウズ

Why Can't I Directly Convert Between Slices of Different Element Types in Go?

スライス タイプを変換できない理由

提供されたコード セグメントのように、あるタイプのスライスを別のタイプに変換しようとする場合, 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 サイトの他の関連記事を参照してください。

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