ホームページ >バックエンド開発 >Golang >CGO 配列を Go スライスに効率的に変換するにはどうすればよいですか?

CGO 配列を Go スライスに効率的に変換するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-03 09:58:11108ブラウズ

How Can I Efficiently Convert a CGO Array to a Go Slice?

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

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