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