Maison  >  Article  >  développement back-end  >  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

王林
王林avant
2024-02-09 13:09:07517parcourir

当为 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()

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

GOOS=darwin GOARCH=amd64

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 : https://www.php.cn/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()

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer