En route, si nous voulons imprimer quelque chose, nous pouvons le faire comme suit:
import "fmt"
func main(){
fmt.Println("Hello world!")
}
Mais j'ai trouvé que l'on peut faire de même sans importer fmt
:
func main(){
println("Hello world!")
}
Quelqu'un pourrait-il expliquer?
println
est une fonction intégrée (dans le runtime) qui peut éventuellement être supprimée, tandis que le package fmt
est dans la bibliothèque standard, qui persistera. Voir la spécification sur ce sujet.
Pour les développeurs de langage, il est pratique d'avoir un println
sans dépendances, mais la voie à suivre est d'utiliser le package fmt
ou quelque chose de similaire (log
par exemple).
Comme vous pouvez voir dans l'implémentation les fonctions print(ln)
ne sont pas conçues pour prendre en charge à distance un mode de sortie différent et sont principalement un outil de débogage.
Pour tirer parti de la réponse de Nemo:
println
est une fonction intégrée au langage. C'est dans la section Bootstrapping du spec . Depuis le lien:
Les implémentations actuelles fournissent plusieurs fonctions intégrées utiles lors du démarrage. Ces fonctions sont documentées pour être complètes mais ne sont pas garanties de rester dans la langue. Ils ne renvoient pas de résultat.
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
Ainsi, ils sont utiles aux développeurs, car ils manquent de dépendances (en cours de construction dans le compilateur), mais pas dans le code de production. Il est également important de noter que print
et println
relèvent de stderr
, et non stdout
.
Cependant, la famille fournie par fmt
est conçue pour être en code de production. Ils relèvent de manière prévisible de stdout
, sauf indication contraire. Ils sont plus polyvalents (fmt.Fprint*
peut signaler à n'importe quel io.Writer
, tel que os.Stdout
, os.Stderr
, ou même un net.Conn
type.) et ne sont pas spécifiques à l'implémentation.
La plupart des packages responsables de la sortie ont fmt
comme dépendance, comme log
. Si votre programme va produire quoi que ce soit en production, fmt
est très probablement le package que vous souhaitez.
Quant à la différence, this est un exemple.
println()
imprime un pointeur sur l'adresse du test de fonction.
fmt.Println()
imprime l'adresse de la fonction.