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

DDD
リリース: 2024-10-25 17:32:02
オリジナル
286 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!