目录

println()函数:

fmt.println()函数:

总结区别:

1.包不同:

2.输出方式不同:

3.方法返回值不同:

4.内置print/println函数的调用不能接受数组和结构体参数。

5.对于组合类型的参数,内置的print/println函数将输出参数的底层值部的地址,而fmt和log标准库包中的打印函数将输出接口参数的动态值的字面形式。

6.如果一个实参有String() string或Error() string方法,那么fmt和log标准库包里的打印函数在打印参数时会调用这两个方法,而内置的print/println函数则会忽略参数的这些方法。


作为一个刚刚接触Go的萌新,在学习Go语言的时候发现demo用了两种用法输出语句:

原文是菜鸟教程中的DemoGo 语言常量 | 菜鸟教程:

package mainimport "fmt"func main() {const LENGTH int = 10const WIDTH int = 5  var area intconst a, b, c = 1, false, "str" //多重赋值area = LENGTH * WIDTHfmt.Printf("面积为 : %d", area)println()println(a, b, c)
}

其中运用了println()和fmt包中的Printf()函数用于输出,然后我又想起,再fmt函数中,还有一个相似的函数是

fmt.Println

于是我就研究了一下println()和fmt.Println()的区别与用法:

println()函数:

我们点进函数可以清楚地看到注释:

// The println built-in function formats its arguments in an
// implementation-specific way and writes the result to standard error.
// Spaces are always added between arguments and a newline is appended.
// Println is useful for bootstrapping and debugging; it is not guaranteed
// to stay in the language.
func println(args ...Type)

简单翻译一下:

1.The println built-in function formats its arguments in an implementation-specific way and writes the result to standard error.println内置函数以特定于实现的方式格式化其参数,并将结果写入标准错误。
2.Spaces are always added between arguments and a newline is appended.始终在参数之间添加空格,并追加换行符。
3.Println is useful for bootstrapping and debugging; it is not guaranteed to stay in the language.Println用于引导和调试;但是不保证在未来的Go版本中继续存在

fmt.println()函数:

// Println formats using the default formats for its operands and writes to standard output.
// Spaces are always added between operands and a newline is appended.
// It returns the number of bytes written and any write error encountered.
func Println(a ...interface{}) (n int, err error) {return Fprintln(os.Stdout, a...)
}

简单翻译一下:

1.Println formats using the default formats for its operands and writes to standard output.Println格式使用其操作数的默认格式,并写入标准输出。
2.Spaces are always added between operands and a newline is appended.始终在操作数之间添加空格,并追加换行符。
3.It returns the number of bytes written and any write error encountered.它返回写入的字节数和遇到的任何写入错误。

根据官方注释,我们可以很清楚的看到在注释中他们很大的区别是在于,fmt.println()是在fmt包下的方法,将结果写入标准输出,而println是在builtin包下的方法,将结果写入标准错误。

总结区别:

1.包不同:

fmt包:

fmt 包使用函数实现 I/O 格式化(类似于 C 的 printf 和 scanf 的函数), 格式化参数源自C,但更简单。

builtin包:

builtin包是go的预声明定义,包括go语言中常用的各种类型和方法声明,包括变量和常量两部分.其详细声明在builtin.go文件中。

因为builtin包是预申明的包,所以不需要import就可以使用,而 fmt 包需要提前import。

2.输出方式不同:

输入标准输出和标准错误也是很明显的输出体现,使用菜鸟教程const iota的例子说明:

 //iotaconst (a = iota   //0b          //1c          //2d = "ha"   //独立值,iota += 1e          //"ha"   iota += 1f = 100    //iota +=1g          //100  iota +=1h = iota   //7,恢复计数i          //8)fmt.Println(a,b,c,d,e,f,g,h,i)println(a,b,c,d,e,f,g,h,i)

输出:

很明显可以看出,在Windows Goland IDE下:标准输出是白色,错误输出是红色。所以一般适用于debug的时候,并且不保证在未来的Go版本中继续存在。一般输出还是调用fmt包输出更为妥当。

3.方法返回值不同:

我们首先观察两个方法的代码:


package fmt
func Println(a ...interface{}) (n int, err error) {return Fprintln(os.Stdout, a...)
}package builtin
func println(args ...Type)

可以发现,fmt.Println是有返回值参数的。

fmt.println():

第一个返回值是:the number of bytes written,也就是往输出上写入了多少个字节

第二个返回值是:any write error encountered,也就是写入的任何错误

也就是说fmt.println()可以实现println()中无法实现的字节数统计和错误分析。

4.内置print/println函数的调用不能接受数组和结构体参数。

 //定义数组arr := [5]int{1,2,3,4,5}fmt.Println(arr)

成功输出:

 //定义数组arr := [5]int{1,2,3,4,5}println(arr)

输出错误:

5.对于组合类型的参数,内置的print/println函数将输出参数的底层值部的地址,而fmtlog标准库包中的打印函数将输出接口参数的动态值的字面形式。

func main() {var numbers = make([]int,3,5)printSlice(numbers)
}func printSlice(x []int){fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)println("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

输出结果:

6.如果一个实参有String() stringError() string方法,那么fmtlog标准库包里的打印函数在打印参数时会调用这两个方法,而内置的print/println函数则会忽略参数的这些方法。

func main() {conent, err := openFile()if err != nil {fmt.Printf("fmt.Printf:存在错误,%v\n", err)} else {fmt.Println(string(conent))}if err != nil {println("println:存在错误,%v\n",err)} else {println(string(conent))}}//只是模拟一个错误
func openFile() ([]byte, error) {return nil, &fileError{}
}type fileError struct {
}func (fe *fileError) Error() string {return "文件错误"
}

输出结果:

以上就是对于println和fmt.Println的区别总结,还有别的问题,欢迎补充

Go语言初见println和fmt.Println区别相关推荐

  1. Golang中的println和fmt.Println

    Golang中常用于打印的是 fmt.Println,就是说要引用fmt包. Golang同时存在着一对println()和print().都是小写字符!记住!!(Golang严格区分大小写) 看起来 ...

  2. go语言中fmt包中Print、Printf、Println输出相关函数的区别

    go语言中fmt包中Print.Printf.Println输出相关函数的区别 区别: Print系列函数将内容输出到系统的标准输出.其区别:Print函数式直接输出内容,Printf函数支持格式化输 ...

  3. Go语言中的fmt.Print, fmt.Printf, fmt.Println的区别和使用场景

    Go语言中的fmt.Print, fmt.Printf, fmt.Println的区别和使用场景 fmt 包的介绍 fmt.Print === 原样输出 fmt.Printf === 格式输出 fmt ...

  4. 关于Go语言..\main.go:4:2: cannot refer to unexported name fmt.println .\main.go:4:2: undefined: fmt.prin

    关于Go语言..\main.go:4:2: cannot refer to unexported name fmt.println .\main.go:4:2: undefined: fmt.prin ...

  5. Go 学习之路:Println 与 Printf 的区别

    Println 和Printf 都是fmt包中公共方法:在需要打印信息时常用的函数,那么二函数有什么区别呢? 附上代码 package main import ("time"&qu ...

  6. fmt.Println、fmt.Printf、fmt.Sprintf、fmt.Sprintln

    fmt包实现了格式化的I/O. 1.fmt.Println: 用默认的类型格式将传入的参数写到标准输出 参数;字符串和变量之间用逗号间隔, 输出:用空格间隔 2.fmt.Printf: 用占位符将传入 ...

  7. 强类型语言和静态类型语言有什么区别?

    另外,一方是否意味着另一方? #1楼 强类型意味着类型之间的转换之间存在限制. 静态类型意味着类型不是动态的 - 一旦创建变量,就无法更改变量的类型. #2楼 这经常被误解,所以让我澄清一下. 静态/ ...

  8. c语言 python-C语言和python的区别

    Python可以说是目前最火的语言之一了,人工智能的兴起让Python一夜之间变得家喻户晓,Python号称目前最最简单易学的语言,现在有不少高校开始将Python作为大一新生的入门语言.本萌新也刚开 ...

  9. run在java_Java语言start和run方法的区别

    Java语言start和run方法的区别 导语:Thread类定义了一个功能,用于存储线程要运行的代码,该存储功能就是run方法.那么它和start方法有什么不同呢?让我们了解一下吧! 调用start ...

最新文章

  1. Clean-Code: 注释
  2. whereis命令查看你要添加的软件在哪里
  3. 带你学python基础:变量和基本数据类型
  4. 详细讲解Python中的self;什么是self?self的传参问题?
  5. FFmpeg在Intel GPU上的硬件加速与优化
  6. jenkins 调用通知接口返回build信息
  7. leetcode1084. 销售分析III(SQL)
  8. 多线程的单元测试工具 - GroboUtils
  9. silverlight 通过WCF与LinQ对数据库进行操作1
  10. iOS键盘遮挡输入框,输入区域自动上移
  11. vue组件样式scoped
  12. 推理游戏---个人解答
  13. 微软产品大升级:Surface Pro 6、Studio 2、Laptop 2 重磅来袭
  14. MVC模式已死?何不试试MOVE
  15. Flutter 路由源码解析
  16. 蔚来汽车3年亏超百亿,只能靠上市来融钱交车?
  17. Vue响应式原理整理笔记
  18. 业绩归因 绩效评估 - 各种收益率计算方法
  19. Java工作4年从美团、百度、阿里、京东面试回来感想
  20. vol.175 李大夫夜话:父母皆祸害?

热门文章

  1. mysql慢查询设置无线_深入mysql慢查询设置的详解
  2. re.IGNORECASE --以不区分大小写的方式对文本做查找和替换
  3. python利用图片制作简易视频
  4. 大象喝水c语言程序,书人2014秋季六年级期中补充复习题汇编(1—30)
  5. canvas绘画七巧板
  6. Java基础(七): instanceof用法详解
  7. 新加坡国旗的绘制(完整版)
  8. 我的世界java版材质包基岩版怎么用_我的世界基岩版材质包怎么导入-我的世界基岩版材质包如何导入...
  9. js设置ajax执行顺序,ajax同步处理(使得JS按顺序执行)
  10. MogaFX—我附近的货币兑换