Go でのエンディアンネスの検出: 改善されたアプローチ
Go では、クロスタスクなどのタスクのためにマシンのエンディアンネスを決定することが不可欠です。プラットフォームのデータ処理。移植性の欠如と Go ガイドラインへの準拠のため、エンディアンをチェックするための安全でないパッケージの使用は推奨されませんが、より信頼性の高い方法が存在します。
TensorFlow からインスピレーションを得たソリューション
Go 用 TensorFlow API は、エンディアン検出に対する洗練されたソリューションを提供します。 2 バイトのバッファを利用し、符号なし 16 ビット整数を最初のバイトのメモリ アドレスに割り当てます。結果のバイト順序に基づいて、関数はマシンのエンディアンを推測します。
TensorFlow の tensor.go からの実装は次のとおりです:
<code class="go">var nativeEndian binary.ByteOrder func init() { buf := [2]byte{} *(*uint16)(unsafe.Pointer(&buf[0])) = uint16(0xABCD) switch buf { case [2]byte{0xCD, 0xAB}: nativeEndian = binary.LittleEndian case [2]byte{0xAB, 0xCD}: nativeEndian = binary.BigEndian default: panic("Could not determine native endianness.") } }</code>
このメソッドの利点
結論
Go では unsafe の使用が推奨されないことがありますが、ここで紹介する方法は TensorFlow に触発され、エンディアンを効果的に検出するバランスの取れたアプローチを提供します。携帯性と信頼性を維持しながら。これは、プラットフォームに依存するデータを処理する必要がある Go プログラムへの貴重な追加機能として機能します。
以上がGo でエンディアンを確実に検出する方法: TensorFlow からインスピレーションを得たアプローチ?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。