Skip to content

Commit

Permalink
docs: update print
Browse files Browse the repository at this point in the history
  • Loading branch information
duanbiaowu authored Feb 4, 2024
1 parent 025490b commit 5146133
Showing 1 changed file with 11 additions and 0 deletions.
11 changes: 11 additions & 0 deletions content/introduction/print.md
Original file line number Diff line number Diff line change
Expand Up @@ -168,3 +168,14 @@ func main() {

笔者建议大家先记住 `fmt` 包里有这两个打印方法,具体的参数顺序和格式化规则可以暂时忽略,
等后面学完了数组、结构体、Map 等复合数据结构以后,再根据具体场景回过头来查找对应的规则。

# 附录

## 内置的`print``println`函数与`fmt``log`标准库包中相应的打印函数有什么区别?

1. 内置的 `print`/`println` 函数总是写入标准错误。 `fmt` 标准包里的打印函数总是写入标准输出。 `log` 标准包里的打印函数会默认写入标准错误,然而也可以通过 `log.SetOutput` 函数来配置。
2. 内置 `print`/`println` 函数的调用不能接受数组和结构体参数。
3. 对于组合类型的参数,内置的 `print`/`println` 函数将输出参数的底层值部的地址,而 `fmt``log` 标准库包中的打印函数将输出接口参数的动态值的字面形式。
4. 目前(Go 1.17),对于标准编译器,调用内置的 `print`/`println` 函数不会使调用参数引用的值逃逸到堆上,而 `fmt``log` 标准库包中的打印函数将使调用参数引用的值逃逸到堆上。
5. 如果一个实参有 `String() string``Error() string` 方法,那么 `fmt``log `标准库包里的打印函数在打印参数时会调用这两个方法,而内置的 `print`/`println` 函数则会忽略参数的这些方法。
6. 内置的 `print`/`println` 函数不保证在未来的 Go 版本中继续存在。

0 comments on commit 5146133

Please sign in to comment.