Détection de l'endianité en Go : une approche améliorée
En Go, il est essentiel de déterminer l'endianité d'une machine pour des tâches telles que le cross- traitement des données de la plateforme. Bien que l'utilisation du package non sécurisé pour vérifier l'endianité soit déconseillée en raison de son manque de portabilité et de respect des directives Go, il existe une méthode plus fiable.
Une solution inspirée de TensorFlow
L'API TensorFlow pour Go offre une solution élégante pour la détection de l'endianité. Il utilise un tampon de deux octets et attribue un entier non signé de 16 bits à l'adresse mémoire du premier octet. En fonction de l'ordre des octets résultant, la fonction déduit le caractère boutien de la machine.
Voici l'implémentation de tensor.go de TensorFlow :
<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>
Avantages de cette méthode
Conclusion
Bien que l'utilisation de unsafe soit parfois déconseillée dans Go, la méthode présentée ici, inspirée de TensorFlow, propose une approche équilibrée qui détecte efficacement l'endianité tout en conservant la portabilité et la fiabilité. Il constitue un ajout précieux à tout programme Go qui doit gérer des données dépendantes de la plate-forme.
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!