в чем разница между 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()
выводит адрес функции.