文章目录
- printf 在 fmt 中是这样定义的 // Printf formats according to a format specifier and writes to standard output. // It returns the number of bytes written and any write error encountered. func Printf(format string, a …any) (n int, err error) { return Fprintf(os.Stdout, format, a…) } Printf 根据格式说明符设置格式并写入标准输出。 它返回写入的字节数n和遇到的任何写入错误err(下面提到字节数和错误用n和err代替)。 它的作用是将格式化的字符串输出到标准输出(一般是控制台)
- 它有两个参数,格式化字符串、需要格式化的变量 func main() { name := “haha” age := 18 fmt.Printf(“%s今年%d岁了n”, name, age) //haha今年18岁了 } 在这段代码中," "中的内容就是格式化的字符串,name和age就是需要格式化的变量。最后输出 haha今年18岁了
- 字节数 : 汉字占三个字节,字母占1个字节,换行符也要占一个字节 为了测试占用的字节数,我打印了下面几句 fmt.Println(“———————————-“) a, o := fmt.Printf(“哈”) fmt.Println() //打印空行 好观察 fmt.Println(a, o) a1, o1 := fmt.Printf(“哈n”) fmt.Println(a1, o1) a11, o11 := fmt.Printf(“哈nn”) fmt.Println(a11, o11) a2, o2 := fmt.Printf(“abc”) fmt.Println() fmt.Println(a2, o2) a3, o3 := fmt.Printf(“%s”, “abc”) fmt.Println() fmt.Println(a3, o3) 结果是 但是向标准输出(os.Stdout)打印时是可以省略返回值的,这是因为 默认情况下,Printf 输出到终端屏幕时极少失败,通常可以忽略返回值 所以我们一般不理会返回值 错误: 如果写入成功,错误值为nil; 如果写入失败,错误值是写入过程中的错误。
- // Sprintf formats according to a format specifier and returns the resulting string. func Sprintf(format string, a …any) string { p := newPrinter() p.doPrintf(format, a) s := string(p.buf) p.free() return s } Sprintf 根据格式说明符设置格式并返回结果字符串。 它的作用是将格式化的字符串输出到字符串中;
- 与 printf 类似,sprintf 也有两个参数:格式化字符串、需要格式化的变量 使用时的写法也和 printf 一样
- sprintf 的返回值是 string 类型的,需要用一个string类型的变量来保存格式化后的字符串 name := “aabb” age := 18 s := fmt.Sprintf(“%s今年%d岁了”, name, age) fmt.Println(s) //aabb今年18岁了 s接收 sprintf 的返回值 最后打印出 aabb今年18岁了
- // Fprintf formats according to a format specifier and writes to w. // It returns the number of bytes written and any write error encountered. func Fprintf(w io.Writer, format string, a …any) (n int, err error) { p := newPrinter() p.doPrintf(format, a) n, err = w.Write(p.buf) p.free() return } Fprintf 根据格式说明符进行格式化并写入 w。 它返回写入的字节数和遇到的任何写入错误。 它的作用是将格式化后的字符串输出到指定的io.Writer接口实现对象中(常见的是将内容写入文件) 在go语言中,io.Writer是go语言标准库io包中定义的内置接口,定义如下 type Writer interface { Write(p []byte) (n int, err error) }
- fprintf 有三个参数 w是实现io.Writer接口的对象,是指定数据写入的目标位置。拿文件来举例,也就是接收数据的文件 另外两个是 格式化字符串、需要格式化的变量,和 printf、sprintf一样
- 两个返回值,写入的字节数和遇到的任何写入错误和 printf 一样
目录
- 笔记
- printf
- 定义
- 参数
- 返回值
- sprintf
- 定义
- 参数
- 返回值
- fprintf
- 定义
- 参数
- 返回值
- 总结
因为在学习C语言的时候,sprintf、fprintf这些就不是很清楚,在后面的go语言学习,遇到了还是有些吃力,所以重新了解了一下
从定义、参数、返回值来比较三者的相似和不同,以此更好了解这三者分别适用的场景
printf 在 fmt 中是这样定义的
// Printf formats according to a format specifier and writes to standard output.
// It returns the number of bytes written and any write error encountered.
func Printf(format string, a ...any) (n int, err error) {
return Fprintf(os.Stdout, format, a...)
}
- Printf 根据格式说明符设置格式并写入标准输出。
- 它返回写入的字节数n和遇到的任何写入错误err(下面提到字节数和错误用n和err代替)。
- 它的作用是将格式化的字符串输出到标准输出(一般是控制台)
它有两个参数,格式化字符串、需要格式化的变量
func main() {
name := "haha"
age := 18
fmt.Printf("%s今年%d岁了n", name, age) //haha今年18岁了
}
在这段代码中," "中的内容就是格式化的字符串,name和age就是需要格式化的变量。最后输出 haha今年18岁了
字节数 :
- 汉字占三个字节,字母占1个字节,换行符也要占一个字节
- 为了测试占用的字节数,我打印了下面几句
fmt.Println("----------------------------------")
a, o := fmt.Printf("哈")
fmt.Println() //打印空行 好观察
fmt.Println(a, o)
a1, o1 := fmt.Printf("哈n")
fmt.Println(a1, o1)
a11, o11 := fmt.Printf("哈nn")
fmt.Println(a11, o11)
a2, o2 := fmt.Printf("abc")
fmt.Println()
fmt.Println(a2, o2)
a3, o3 := fmt.Printf("%s", "abc")
fmt.Println()
fmt.Println(a3, o3)
结果是

但是向标准输出(os.Stdout)打印时是可以省略返回值的,这是因为
默认情况下,Printf 输出到终端屏幕时极少失败,通常可以忽略返回值
所以我们一般不理会返回值
错误:
- 如果写入成功,错误值为nil;
- 如果写入失败,错误值是写入过程中的错误。
// Sprintf formats according to a format specifier and returns the resulting string.
func Sprintf(format string, a ...any) string {
p := newPrinter()
p.doPrintf(format, a)
s := string(p.buf)
p.free()
return s
}
Sprintf 根据格式说明符设置格式并返回结果字符串。
它的作用是将格式化的字符串输出到字符串中;
与 printf 类似,sprintf 也有两个参数:格式化字符串、需要格式化的变量
使用时的写法也和 printf 一样
sprintf 的返回值是 string 类型的,需要用一个string类型的变量来保存格式化后的字符串
name := "aabb"
age := 18
s := fmt.Sprintf("%s今年%d岁了", name, age)
fmt.Println(s) //aabb今年18岁了
s接收 sprintf 的返回值
最后打印出 aabb今年18岁了
// Fprintf formats according to a format specifier and writes to w.
// It returns the number of bytes written and any write error encountered.
func Fprintf(w io.Writer, format string, a ...any) (n int, err error) {
p := newPrinter()
p.doPrintf(format, a)
n, err = w.Write(p.buf)
p.free()
return
}
- Fprintf 根据格式说明符进行格式化并写入 w。
- 它返回写入的字节数和遇到的任何写入错误。
它的作用是将格式化后的字符串输出到指定的io.Writer接口实现对象中(常见的是将内容写入文件)
在go语言中,io.Writer是go语言标准库io包中定义的内置接口,定义如下
type Writer interface {
Write(p []byte) (n int, err error)
}
fprintf 有三个参数
w是实现io.Writer接口的对象,是指定数据写入的目标位置。拿文件来举例,也就是接收数据的文件
另外两个是 格式化字符串、需要格式化的变量,和 printf、sprintf一样
两个返回值,写入的字节数和遇到的任何写入错误和 printf 一样
以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。
您可能感兴趣的文章:
- GoLang语法之标准库fmt.Printf的使用
- Golang Printf,Sprintf,Fprintf 格式化详解