в чем разница между fmt.Println () и println () в go
в Go, если мы хотим что-то напечатать, мы можем сделать это следующим образом:
import "fmt"
func main(){
fmt.Println("Hello world!")
}
но я обнаружил, что можно сделать то же самое без импорта fmt
:
func main(){
println("Hello world!")
}
кто-нибудь может объяснить?
3 ответа:
println
это встроенная функция (во время выполнения), которая может уйти, в то время какfmt
пакета в стандартной библиотеке, которая будет сохраняться. Смотрите спец на эту тему.для разработчиков языков удобно иметь
println
без зависимостей, но путь состоит в том, чтобы использоватьfmt
пакета или что-то подобное (log
например).как вы можете посмотреть в реализации the
print(ln)
функции не предназначены чтобы даже удаленно поддерживать другой режим вывода и в основном инструмент отладки.
чтобы основываться на ответе Немо:
println
- это функция, встроенная в язык. Он находится в разделе начальной загрузки spec. Из ссылки:текущие реализации обеспечивают несколько встроенных функций, полезных во время начальной загрузки. Эти функции документированы для полноты но не гарантируется пребывание на языке. Они не возвращают результат.
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
таким образом, они полезны для разработчиков, потому что у них нет зависимостей (встроенных в компилятор), но не в производственном коде. Также важно отметить, что
println
отчетstderr
, а неstdout
.семья, предоставленная
fmt
, однако, построены, чтобы быть в производственном коде. Они сообщают предсказуемоstdout
, если не указано иное. Они более универсальны (fmt.Fprint*
может сообщить любомуio.Writer
, напримерos.Stdout
,os.Stderr
, или дажеnet.Conn
тип.) и не конкретные реализации.большинство пакетов, которые отвечают за производства
fmt
как зависимость, напримерlog
. Если ваша программа будет выводить что-либо в производстве,fmt
скорее всего пакет, который вы хотите.
что касается разницы, этой пример.
println()
выводит указатель на адрес функционального теста.
fmt.Println()
выводит адрес функции.