54 votes

`Voulez-vous que l'application "main" accepte les connexions réseau entrantes ?` apparaît lors de l'exécution des applications Go

Chaque fois que j'exécute des applications Go sur MacOs avec cette commande :

go run main.go

Je reçois ce message pop up :

Voulez-vous que l'application "main" accepte les connexions réseau entrantes ?

J'ai ajouté Go et tous les fichiers exécutables main aux exceptions du pare-feu, mais je reçois toujours ces pop-ups. Je commence à manquer d'idées. Est-ce que quelqu'un pourrait m'aider à me débarrasser de ces fenêtres popup ? À ce stade, je ne sais pas si le problème est lié à Golang ou à MacOs.

1 votes

Lorsque vous développez des serveurs sur un ordinateur portable / de bureau Linux, vous n'obtenez pas de telles absurdités ;-)

0 votes

Si seulement les employeurs étaient heureux que les gens travaillent sur des machines Linux. C'est toujours soit un MacBook soit un ordinateur portable Windows :D

61voto

MiDZiiii Points 21

Vous pouvez éviter cette fenêtre contextuelle lors de l'exécution de tests locaux si vous spécifiez la partie hôte de l'adresse qui sera écoutée pour être "localhost" ou "127.0.0.1". De nombreux programmes vous permettent de définir l'adresse via la ligne de commande ou une variable d'environnement et bon nombre de ces programmes passeront par défaut aucun hôte à la commande d'écoute. Sans hôte spécifié, Go écoutera sur 0.0.0.0 et macOS voudra vous avertir à ce sujet. Lorsque Go ouvre des ports sur localhost, macOS ne prévient pas - du moins pas dans mes cas.

Par exemple, au lieu de:

r := gin.Default()
r.Run()

vous pouvez écrire:

r := gin.Default()
r.Run("localhost:8080")

20voto

Merci pour la réponse de @WeakPointer ci-dessus, j'ai réalisé tout ce que nous devons faire dans notre code est de remplacer:

http.ListenAndServe(":8080", nil)

par:

http.ListenAndServe("localhost:8080", nil)

ou si vous utilisez une bibliothèque comme gin-gonic, remplacez:

r.Run()

par:

r.Run("localhost:8080")

15voto

Graham Miln Points 39606

Ceci est un comportement normal.

Chaque fois que vous exécutez go run main.go, un nouveau fichier exécutable est créé. Ce fichier exécutable est unique et non reconnu par les vérifications de sécurité de macOS. Ainsi, macOS demande, à chaque fois, de confirmer si le nouvel exécutable peut avoir accès au réseau.

Construire et signer

Pour éviter l'avertissement, vous devez construire le fichier exécutable une fois et le signer. Vous pouvez construire le fichier exécutable en utilisant la commande :

go build -o mycmd main.go

L'exécutable résultant appelé mycmd peut être exécuté en utilisant :

./mycmd

Pour signer de manière ad-hoc cet exécutable, utilisez :

codesign -s - mycmd

Cela fera en sorte que macOS fasse confiance à cette construction de mycmd sur votre Mac. La première fois qu'il est exécuté, vous serez demandé l'accès au réseau. Les exécutions ultérieures ne nécessiteront pas de vérifications réseau.

0 votes

Merci, devrais-je répéter cela chaque fois que je change le code ?

1 votes

Oui, chaque fois que vous recompilez le code, vous devrez le codesigner et accorder au processus l'accès au réseau. Vous voudrez peut-être envisager un petit makefile ou script shell pour combiner les commandes go build… et codesign….

0 votes

Cliquer sur "Autoriser" semble plus facile...

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X