35 votos

¿Quieres que la aplicación "main" acepte conexiones de red entrantes?

Cada vez que ejecuto aplicaciones Go en MacOS con este comando:

go run main.go

Me aparece este mensaje emergente:

Do you want the application "main" to accept incoming network connections?

He añadido Go y todos main archivos ejecutables a las Excepciones del Firewall, pero todavía estoy recibiendo este pop ups. Me estoy quedando sin ideas. Por favor, ¿alguien puede ayudarme a deshacerme de esas ventanas emergentes? En este momento no tengo ni idea de si el problema está relacionado con Golang o con MacOS.

45voto

MiDZiiii Puntos 6

Puede evitar esta ventana emergente cuando ejecute pruebas locales si especifica que la parte del host de la dirección que se escuchará es "localhost" o "127.0.0.1". Muchos programas le permiten establecer la dirección a través de la línea de comandos o de una variable de entorno y muchos de esos programas por defecto no pasarán ningún host al comando listen. Si no se especifica ningún host, Go escuchará en 0.0.0.0 y MacOS querrá advertirle de ello. Cuando Go abre puertos en el localhost, MacOS no advierte - al menos no en mis casos.

15voto

Gracias a la respuesta de @WeakPointer más arriba, me imaginé que todo lo que tenemos que hacer en nuestro código es reemplazar:

http.ListenAndServe(":8080", nil)

por:

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

o si se utiliza una biblioteca como gin-gonic, sustituir:

r.Run()

por:

r.Run("localhost:8080")

9voto

Steve Evans Puntos 155

Es un comportamiento normal.

Cada vez que se ejecuta go run main.go se está creando un nuevo archivo ejecutable. Este archivo ejecutable es único y no es reconocido por los controles de seguridad de MacOS. Por lo tanto, MacOS le pide, cada vez, que confirme si el nuevo ejecutable puede tener acceso a la red.

Construir y firmar

Para evitar la advertencia, es necesario construir el archivo ejecutable una vez y codificarlo. Puedes construir el archivo ejecutable utilizando el comando:

go build -o mycmd main.go

El ejecutable resultante llamado mycmd se puede ejecutar con:

./mycmd

Para codificar ad-hoc este ejecutable utilice:

codesign -s - mycmd

Esto hará que MacOS confíe en esta compilación de mycmd en tu Mac. La primera vez que se ejecute, se le pedirá acceso a la red. Las siguientes ejecuciones no requerirán comprobaciones de red.

0 votos

Gracias, ¿tendría que repetirlo cada vez que cambie el código?

1 votos

Sí, cada vez que recompiles el código tendrás que codificar y conceder al proceso acceso a la red. Puede que quieras considerar un pequeño makefile o shell script para combinar el go build… y codesign… comandos.

0 votos

Hacer clic en "Permitir" parece más fácil...

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X