为了账号安全,请及时绑定邮箱和手机立即绑定

Go中的fmt.Println()和println()之间的区别

Go中的fmt.Println()和println()之间的区别

Go
冉冉说 2021-05-02 12:23:28
如下图所示,无论是fmt.Println()和println()给围棋相同的输出:Hello world!但是:它们彼此之间有何不同?片段1,使用fmt包装;package mainimport (    "fmt")func main() {    fmt.Println("Hello world!")}片段2,不带fmt包装;package mainfunc main() {    println("Hello world!")}
查看完整描述

3 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

println是一个内置函数(在运行时中),当fmt程序包位于标准库中时,该函数可能会最终删除,该函数将继续存在。请参阅有关该主题的规范

对于语言开发人员来说,println没有依赖是很方便的,但是方法是使用fmt软件包或类似的东西(log例如)。

如您在实现中看到的,这些print(ln)功能并非旨在远程支持其他输出模式,而主要是调试工具。


查看完整回答
反对 回复 2021-05-31
?
精慕HU

TA贡献1845条经验 获得超8个赞

以nemo的答案为基础:


println是语言内置的功能。它在规范的Bootstrapping部分中。从链接:


当前的实现提供了一些自举过程中有用的内置函数。这些功能已记录完整,但不能保证始终保留该语言。他们不返回结果。


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则很可能是您想要的软件包。


查看完整回答
反对 回复 2021-05-31
?
慕沐林林

TA贡献2016条经验 获得超9个赞

我可以在这里看到区别:


rangeOverIntsAndStrings(1, 5)


func rangeOverIntsAndStrings(args ...interface{}) {

    for _, v := range args {

        println(v)

    }

}

// 输出


(0x108f060,0x10c5358)

(0x108f060,0x10c5360)

对比


func rangeOverIntsAndStrings(args ...interface{}) {

    for _, v := range args {

        fmt.Println(v)

    }

}

// 输出


1

5


查看完整回答
反对 回复 2021-05-31
  • 3 回答
  • 0 关注
  • 339 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信