Afin de déterminer l'endianité d'une machine, on peut envisager d'utiliser le code Go suivant :
<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>
Cependant, cette approche repose sur le package non sécurisé, ce qui peut conduire à un code non portable et potentiellement dangereux. Heureusement, l'API TensorFlow pour Go fournit une solution alternative qui utilise également le package unsafe mais de manière plus robuste :
<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>
Cet extrait de code profite du fait qu'un uint16 peut être stocké dans un 2 -byte buffer, et l'ordre des octets dépendra du boutisme du système. En examinant la disposition des octets dans le tampon, le code détermine le caractère boutien du système et définit la variable nativeEndian en conséquence.
L'utilisation de cette méthode fournit un moyen plus fiable de vérifier le caractère boutien dans Go tout en respectant les limitations imposées. par le colis dangereux.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!