zl程序教程

您现在的位置是:首页 >  其他

当前栏目

GO语言中println和fmt.println()区别

2023-04-18 16:10:28 时间

golang中打印数据我们通常是使用fmt.Println(),但是其实golang中也有内置的Println()方法

  • 内置的Println()/Print()函数都是标准错误输出,而fmt.Println()函数是标准输出
  • 内置的Println()/Print()函数输出结果可能与预期结果顺序不一致,而fmt.Println()函数输出结果与预期结果完全一致。(这个特性是由标准错误输出和标准输出决定)
  • 内置Println()/Print()函数不能接受数组和结构体类型的数据
  • 内置Println()/Print()函数对于组合类型的数据输出的结果是参数值的地址,而fmt.Println()函数输出的是字面量

重点说一下标准错误输出和标准输出的区别;

标准错误输出在Linux中是stderr,在JAVA中是System.err,在Golang中是Print()/Println()

标准输出在Linux中是stdout,在JAVA中是System.out,在Golang中是fmt.Println()

我们以JAVASystem.err,System.out作为比较,其他语言类似。

引入JDK官方文档的解释System.err,System.out:

out:“标准”输出流。此流已打开并准备接受输出数据。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。

err:“标准”错误输出流。此流已打开并准备接受输出数据。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。按照惯例,此输出流用于显示错误消息,或者显示那些即使用户输出流(变量 out 的值)已经重定向到通常不被连续监视的某一文件或其他目标,也应该立刻引起用户注意的其他信息。

官方解释是不是很抽象?确实是,大多数人也这样认可的。我用通俗的语言解释一下

out : 把数据流输出到显示器或其他外设

err : 把数据流输出到显示器或其他外设,但是err数据流一般是错误信息,而前者是正确信息

其实从字面意思上就能看出,一个是专为输出错误用的,一个是通常输出用的,都是输出流,但按照人们习惯惯例还是分开的好。

System.err,System.out的正确使用:

try {
    InputStream input = new FileInputStream("d:\java\...");
    System.out.println("open a file");
} catch (IOException e) {
    System.err.println("open a file failed:");
    e.printStackTrace();
}

JAVA中的System.err,System.out 还有一个区别是 前者不带缓冲区后者带缓冲区,这就可能导致输出结果可能与预期结果顺序不一致。但这个特性其他语言不一定满足,所以不做介绍。