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依赖性(被编译到编译器中),而不是生产代码。 同样重要的是要注意print
和println
报告stderr
,而不是stdout
。
然而,由fmt
提供的家庭是build立在生产代码中的。 除非另有说明,否则他们可以预测stdout
。 它们更通用( fmt.Fprint*
可以报告给任何io.Writer
,比如os.Stdout
, os.Stderr
,甚至是net.Conn
types),而不是实现特定的。
大多数负责输出的软件包都具有相关性,比如log
。 如果你的程序要在生产中输出任何东西, fmt
很可能就是你想要的包。
至于区别, 这是一个例子。
println()
打印一个指针指向函数test的地址。
fmt.Println()
打印函数的地址。