文字列のスライスからカスタム タイプのスライスへの変換
質問:
Go が阻止します文字列のスライスから、同じ基礎となる要素型を共有するカスタム型のスライスへの直接変換。この制限が設けられているのはなぜですか?また、データの重複を回避する代替手段はありますか?
回答:
制限の理由:
この制限は、偶然同じを持つ無関係な型間で偶発的に型変換が行われないようにするために実装されました。 Structure.
「unsafe」パッケージを使用した代替変換方法:
直接変換は許可されていませんが、unsafe パッケージを使用してコピーせずにスライスを直接変換することは可能です。ただし、このアプローチには細心の注意が必要です:
value := []string{"a", "b", "c"} // convert &value (type *[]string) to *[]Card via unsafe.Pointer, then deref cards := *(*[]Card)(unsafe.Pointer(&value)) firstHand := NewHand(cards)
警告:
unsafe.Pointer 型では任意のメモリ アクセスが許可されるため、細心の注意を払って使用する必要があります。可能性の理解リスク。
推奨事項:
一般に、潜在的なエラーや未定義の動作を回避するには、スライス データを目的のカスタム タイプにコピーする方が安全です。
以上がデータを複製せずにGoで文字列のスライスをカスタムタイプのスライスに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。