CGO 配列を Go スライスにキャストする: より良い代替案
Go では、CGO 配列をスライスに変換するには手動で実行できます。質問に示されているように、各要素をキャストします。ただし、このアプローチは面倒になる可能性があります。より便利な方法は次のとおりです。
c := [6]C.double{1, 2, 3, 4, 5, 6} fs := make([]float64, len(c)) for i, v := range c { fs[i] = float64(v) }
このバージョンでは、各要素を手動でキャストする必要がなくなりました。代わりに、範囲ループを使用して CGO 配列を反復処理し、各要素を float64 に自動的に変換します。
安全でないキャスト (非推奨)
または、安全でないポインターキャストを使用して変換を実現できます。
cfa := (*[6]float64)(unsafe.Pointer(&c)) cfs := cfa[:]
このアプローチでは、 CGO 配列を float64 配列へのポインターに安全にキャストし、結果の配列をスライスします。このメソッドは高速かもしれませんが、Go のメモリ安全性チェックをバイパスするため、安全ではないと考えられています。
結論
安全でないキャスト方法は高速ですが、メモリを優先することが重要です製品コードの安全性。より安全で簡単な方法は、配列を手動で反復処理し、変換を明示的に実行することです。
以上がCGO 配列を Go スライスに効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。