verbs variable print playground log golang go println

variable - ¿Cuál es la diferencia entre fmt.Println() e println() en go



golang print console (3)

En cuanto a la diferencia, this es un ejemplo.

println() imprime un puntero a la dirección de la prueba de función.

fmt.Println() imprime la dirección de la función.

En go, si queremos imprimir algo, podemos hacerlo de la siguiente manera:

import "fmt" func main(){ fmt.Println("Hello world!") }

Pero descubrí que uno puede hacer lo mismo sin importar fmt :

func main(){ println("Hello world!") }

¿Podría alguien explicar por favor?


Para construir sobre la respuesta de Nemo:

println es una función integrada en el lenguaje. Está en la sección Bootstrapping de la especificación . Desde el enlace:

Las implementaciones actuales proporcionan varias funciones integradas útiles durante el arranque. Estas funciones están documentadas para ser completas, pero no se garantiza que permanezcan en el idioma. No devuelven un resultado.

Function Behavior print prints all arguments; formatting of arguments is implementation-specific println like print but prints spaces between arguments and a newline at the end

Por lo tanto, son útiles para los desarrolladores, ya que carecen de dependencias (se integran en el compilador), pero no en el código de producción. También es importante tener en cuenta que print e println informan a stderr , no stdout .

La familia provista por fmt , sin embargo, está construida para estar en código de producción. Informan de manera predecible a stdout , a menos que se especifique lo contrario. Son más versátiles ( fmt.Fprint* puede informar a cualquier io.Writer , como os.Stdout , os.Stderr , o incluso un net.Conn type.) Y no son específicos de la implementación.

La mayoría de los paquetes que son responsables del resultado tienen fmt como dependencia, como log . Si su programa va a producir algo en producción, fmt es probablemente el paquete que desea.


println es una función incorporada (en el tiempo de ejecución) que puede desaparecer, mientras que el paquete fmt está en la biblioteca estándar, que persistirá. Vea las especificaciones sobre ese tema.

Para los desarrolladores de lenguaje es útil tener una lista de println sin dependencias, pero el camino a seguir es usar el paquete fmt o algo similar ( log por ejemplo).

Como puede ver en la implementación, las funciones de print(ln) no están diseñadas para admitir remotamente un modo de salida diferente y son principalmente una herramienta de depuración.