Maison > développement back-end > Golang > Utiliser uname pour obtenir l'architecture du processeur sous Mac donne des résultats erronés lors de la création de binaires go pour amd64

Utiliser uname pour obtenir l'architecture du processeur sous Mac donne des résultats erronés lors de la création de binaires go pour amd64

王林
Libérer: 2024-02-09 13:09:07
avant
658 Les gens l'ont consulté

当为 amd64 构建 go 二进制文件时,使用 uname 在 mac 中获取处理器架构会给出错误的结果

L'éditeur php Xigua a découvert un problème lors du traitement des fichiers binaires amd64 build go. Sur les systèmes Mac, l'utilisation d'uname pour obtenir l'architecture du processeur peut conduire à des résultats incorrects. Ce problème peut avoir un impact sur le processus de compilation et de construction, il doit donc être noté. La bonne façon d'obtenir l'architecture du processeur consiste à utiliser la fonction runtime.GOARCH intégrée de go. Cela peut éviter les erreurs causées par uname et garantir l'exactitude de la compilation et de la construction.

Contenu de la question

J'ai un service Golang et j'ai besoin d'obtenir le type d'architecture du processeur

archCmd := exec.Command("uname", "-m")
arch, _ := archCmd.CombinedOutput()
Copier après la connexion

J'exécute le même binaire sur les machines Intel et Arm. Les binaires sont construits avec

GOOS=darwin GOARCH=amd64
Copier après la connexion

Sur les machines ARM, cela obtient x86_64. Cela semble se produire depuis que j'ai construit avec GOARCH=amd64 . Mais je ne sais pas pourquoi cela se produit. Si je souhaite exécuter le même binaire de build sur les machines Intel et Arm, quelles sont mes alternatives ?

Solution

Citation@hrdyCommentaire décrivant ce problème :

Citant une réponse distincte du superutilisateur : //m.sbmmt.com/link/211fff9e65c0e47a790c629116e32996

...Cela nécessitera une logique conditionnelle pour détecter le système d'exploitation et une analyse pour détecter le type de processeur Apple. Cela pourrait être interrompu à l'avenir si la valeur de cette chaîne change.

archCmd := exec.Command("sysctl", "machdep.cpu.brand_string")
arch, _ := archCmd.CombinedOutput()
Copier après la connexion

Encore une fois, merci à @selalerercapitolis pour le lien de réponse.

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal