コンピューターのエンディアンネスを決定することは、データ操作にとって重要です。 Go では、エンディアンをチェックする 1 つの方法として、unsafe パッケージを使用して整数をバイトにキャストし、その値を分析することが含まれます。
<code class="go">var i int = 0x0100 ptr := unsafe.Pointer(&i) if 0x01 == *(*byte)(ptr) { fmt.Println("Big Endian") } else if 0x00 == *(*byte)(ptr) { fmt.Println("Little Endian") } else { // ... }</code>
このアプローチは機能しますが、安全でないパッケージを使用すると、移植性と安全性に関する懸念が生じます。
安全でないパッケージを引き続き使用する、エンディアンをチェックするための改善された方法が、Google の TensorFlow Go API によって提供されます。
<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>
このソリューションは、バイトのスライスを初期化し、その uint16 表現を 0xABCD に設定します。結果のバイト順序を調べることにより、システムのエンディアンが決定されます。このアプローチはより堅牢であり、Google で広く採用されているライブラリと連携しています。
以上がGo でエンディアンを決定する方法: 2 つの方法の比較分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。