в чем разница между 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 например).

как вы можете посмотреть в реализации на 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

таким образом, они полезны разработчикам, потому что им не хватает зависимостей (встроенных в компилятор), но не в производственном коде. Также важно отметить, что print и println отчет stderr, а не stdout.

семья, предоставленная fmt, однако, построены, чтобы быть в производственном коде. Они докладывают предсказуемо stdout, если не указано иное. Они более универсальны (fmt.Fprint* может сообщить любому io.Writer, например os.Stdout, os.Stderr, или даже net.Conn тип.) и не конкретные реализации.

большинство пакетов, которые отвечают за производства fmt как зависимость, например log. Если ваша программа будет выводить что-либо в производство, fmt скорее всего пакет, который вы хотите.


что касается разницы, этой пример.

println() выводит указатель на адрес функционального теста.

fmt.Println() выводит адрес функции.