开发者

golang格式化输出函数printf、sprintf、fprintf解读

目录
  • 笔记
  • printf
    • 定义
    • 参数
    • 返回值
  • sprintf
    • 定义
    • 参数
    • 返回值
  • fprintf
    • 定义
    • 参数
    • 返回值
  • 总结

    笔记

    因为在学习C语言的时候,sprintf、fprintf这些就不是很清楚,在后面的go语言学习,遇到了还是有些吃力,所以重新了解了一下

    从定义、参数、返回值来比较三者的相似和不同,以此更好了解这三者分别适用的场景

    printf

    定义

    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代替)。
    • 它的作用是KWtMYt将格式化的字符串输出到标准输出(一般是控制台)

    参数

    它有两个参数,格式化字符串、需要格式化的变量

    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("哈\n\n")
    	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)
    

    结果是

    golang格式化输出函数printf、sprintf、fprintf解读

    但是向标准输出(os.Stdout)打印时是可以省略返回值的,这是因为

    默认情况下,Printf 输出到终端屏幕时极少失败,通常可以忽略返回值

    所以我们一般不理会返回值

    错误:

    • 如果写入成功,错误值为nil;
    • 如果写入失败,错误值是写入过程中的错误。

    sprintf

    定义

    // 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岁了

    fppythonrintf

    定义

    /js/ 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 一样

    总结

    以上为个人经验,希望能给大家一个参考python,也希望大家多多支持编程客栈(www.devze.com)。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜