首先声明,在 Go 语言中:
- 存在
print
、println
,不存在printf
- 存在
fmt.Println
、fmt.Println
与fmt.Printf
下面是 print
与 fmt.Print
的具体区别:
fmt.Print | ||
---|---|---|
来源 | Go的内建函数,无需导包 | fmt包中的函数,需要导入fmt包 |
格式化能力 | 不支持格式化输出 | 支持复杂的格式化输出 |
建议使用场景 | 主要用于调试,生产环境不建议 | 生产环境推荐使用 |
返回值 | 无返回值 | 返回打印的字节数和可能的错误 |
打印复杂对象 | 只打印出地址 | 打印出对象的详细内容 |
案例:使用 fmt.Println
返回值验证打印语句是否发生错误:
func main() {
n, err := fmt.Println("Hello, world!")
if err != nil {
fmt.Fprintf(os.Stderr, "Println failed: %v\n", err)
os.Exit(1)
}
fmt.Println("Printed", n, "bytes")
}
在这个示例中,我们打印了"Hello, world!"
,然后检查了fmt.Println
返回的错误。如果发生错误,我们将错误信息写入到os.Stderr
,并退出程序。如果没有发生错误,我们将打印出写入的字节数。
在大多数情况下,fmt.Println不会返回错误。但是如果你将 os.Stdout
重定向到一个已经关闭或不可写的文件,或者发生了类似的问题,fmt.Println可能就会返回错误。