Menentukan endianness komputer adalah penting untuk manipulasi data. Dalam Go, satu kaedah untuk menyemak endian melibatkan penggunaan pakej tidak selamat untuk menghantar integer ke bait dan menganalisis nilainya.
<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>
Semasa pendekatan ini berfungsi, penggunaan pakej tidak selamat menimbulkan kebimbangan tentang kemudahalihan dan keselamatan.
Kaedah yang dipertingkatkan untuk menyemak endianness, masih menggunakan pakej yang tidak selamat, disediakan oleh API TensorFlow Go Google:
<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>
Penyelesaian ini memulakan sekeping bait dan menetapkan perwakilan uint16nya kepada 0xABCD. Dengan memeriksa susunan bait yang terhasil, ia menentukan endian sistem. Pendekatan ini lebih mantap dan sejajar dengan perpustakaan Google yang diterima pakai secara meluas.
Atas ialah kandungan terperinci Cara Menentukan Endianness dalam Go: Analisis Perbandingan Dua Kaedah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!