fmt.Println()和println()之间有什么区别

如果我们想打印一些东西,我们可以这样做:

import "fmt" func main(){ fmt.Println("Hello world!") } 

但是我发现没有导入fmt就可以做同样的事情:

 func main(){ println("Hello world!") } 

有人可以解释吗?

println是一个内置函数(进入运行时),可能会消失,而fmt包在标准库中,这个函数将会持续下去。 请参阅有关该主题的规范 。

对于语言开发者来说,有一个没有依赖关系的println是很方便的,但是要走的路是使用fmt包或类似的东西(例如log )。

正如你在实现中看到的那样, print(ln)函数不是devise用来远程支持不同的输出模式,而主要是一个debugging工具。

build立在尼莫的答案:

println是内置在语言中的一个函数。 它在规范的引导部分。 从链接:

当前的实现提供了几个在引导过程中有用的内置函数。 这些function是完整的文件logging,但不能保证停留在语言。 他们不返回结果。

 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 

因此,它们对于开发人员非常有用,因为它们缺less依赖性(被编译到编译器中),而不是生产代码。 同样重要的是要注意printprintln 报告stderr ,而不是stdout

然而,由fmt提供的家庭是build立在生产代码中的。 除非另有说明,否则他们可以预测stdout 。 它们更通用( fmt.Fprint*可以报​​告给任何io.Writer ,比如os.Stdoutos.Stderr ,甚至是net.Conntypes),而不是实现特定的。

大多数负责输出的软件包都具有相关性,比如log 。 如果你的程序要在生产中输出任何东西, fmt很可能就是你想要的包。

至于区别, 这是一个例子。

println()打印一个指针指向函数test的地址。

fmt.Println()打印函数的地址。