Opierając się na odpowiedzi nemo:
println
to funkcja wbudowana w język. Znajduje się w sekcji Bootstrapping specyfikacji . Z linku:
Obecne implementacje zapewniają kilka wbudowanych funkcji przydatnych podczas ładowania początkowego. Funkcje te są udokumentowane pod kątem kompletności, ale nie gwarantuje się, że pozostaną w języku. Nie zwracają wyniku.
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
Dlatego są przydatne dla programistów, ponieważ brakuje im zależności (są wbudowane w kompilator), ale nie są w kodzie produkcyjnym. Ważne jest również, aby to zauważyć print
i println
zgłosić się stderr
, że niestdout
.
Rodziny dostarczone przez są fmt
jednak zbudowane tak, aby były w kodzie produkcyjnym. Zgłaszają się w sposób przewidywalny stdout
, chyba że określono inaczej. Są bardziej uniwersalne ( fmt.Fprint*
mogą zgłosić się do dowolnego io.Writer
, takich jak os.Stdout
, os.Stderr
czy nawetnet.Conn
rodzaj.) I nie są specyficzne dla implementacji.
Większość pakietów odpowiedzialnych za dane wyjściowe ma fmt
jako zależność, taką jak log
. Jeśli twój program ma wypisywać cokolwiek w środowisku produkcyjnym, fmt
najprawdopodobniej jest to pakiet, którego potrzebujesz.
Ciekawy przykład:
To jest różnica między
println
ifmt.Printf
.źródło