Untuk menentukan endianness mesin, seseorang boleh mempertimbangkan untuk menggunakan kod Go berikut:
<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>
Walau bagaimanapun, pendekatan ini bergantung pada pakej yang tidak selamat, yang boleh membawa kepada kod yang tidak mudah alih dan berkemungkinan tidak selamat. Nasib baik, TensorFlow API for Go menyediakan penyelesaian alternatif yang turut menggunakan pakej yang tidak selamat tetapi dengan cara yang lebih mantap:
<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>
Coretan kod ini mengambil kesempatan daripada fakta bahawa uint16 boleh disimpan dalam 2 -byte buffer, dan susunan bait akan bergantung pada endianness sistem. Dengan memeriksa susunan bait dalam penimbal, kod menentukan endian sistem dan menetapkan pembolehubah nativeEndian dengan sewajarnya.
Menggunakan kaedah ini menyediakan cara yang lebih dipercayai untuk menyemak endian dalam Go sambil tetap mematuhi had yang dikenakan oleh pakej yang tidak selamat.
Atas ialah kandungan terperinci Bagaimana untuk Menentukan Endianness dalam Pergi tanpa Mengorbankan Keselamatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!