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