0
私は、低レベルのプロジェクトにはGoを使い、データをコピーしないようにしたいと思います。構造体のポインタで[]バイトをキャストする方法は?
私は、固定サイズの構造体を持っている:バイトのスライスが何をコピーせずに、構造体であるかのように
type myStruct struct {
a uint8
b uint8
}
私は値を読み取るために、このslice of bytes
とpointer of my struct
をキャストしたいと思います。 Cでは
data := []byte{69,0}
var obj *myStruct
//something like:
obj = myStruct(data)
// or
obj = &myStruct(data)
それは次のようになります。obj = (struct myStruct*) data;
- それは可能ですか?そうするための解決策は何ですか?ベストプラクティス?
私は[]バイトのオフセットを使用して、インデックス無効にしたいと思います。
スライスが固定メモリではないので、私はそれが固定されたアレイbyte[0:2]
に[]byte
を変換することによって可能になるだろうと思います。
なしゴーネイティブソリューション?このソリューションは、[]バイトの長さで動作しますか?スライスのメモリマップは連続していないので、私は、安全でないパッケージがコピーによってパフォーマンスを変えることなくそれを処理することができるかどうか、あるいは...ベンチマークでチェックします。 –
@Alexis_FR_JPこれはGoネイティブであり、スライスは常に連続しています。 – JimB
偉大な、私は '安全でない'を使用することを避けました。なぜなら、Rob Pikeは、 'unsafe 'をインポートするアプリケーションで生産に入るべきではないと聞いたからです。それにもっと集中する必要があります。ありがとうございました! –