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

 更新时间:2025年07月03日 09:56:59   作者:ooshTinG  
这篇文章主要介绍了golang格式化输出函数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代替)。
  • 它的作用是将格式化的字符串输出到标准输出(一般是控制台)

参数

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

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)

结果是

在这里插入图片描述

但是向标准输出(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岁了

fprintf

定义

// 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通脉之map详情

    Golang通脉之map详情

    这篇文章主要介绍了Golang通脉之map,Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现,map 是一种无序的键值对的集合。map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值 map 是一种集合,所以可以像迭代数组和切片那样迭代它
    2021-10-10
  • go语言的变量定义示例详解

    go语言的变量定义示例详解

    这篇文章主要为大家介绍了go语言的变量定义示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Go语言如何实现将[][]byte转为io.Reader

    Go语言如何实现将[][]byte转为io.Reader

    本文主要介绍了如何在Go语言中实现将[][]byte转换为io.Reader,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2025-02-02
  • Go 语言sort 中的sortInts 方法

    Go 语言sort 中的sortInts 方法

    这篇文章主要介绍了Go 语言sort 中的sortInts 方法,Go 的 sort 包实现了内置和用户定义类型的排序。我们将首先查看内置函数的排序,西瓦嗯更多相关资料需要的小伙伴可以参考一下
    2022-04-04
  • Go语言对接微信支付与退款指南(示例详解)

    Go语言对接微信支付与退款指南(示例详解)

    在互联网技术日益发展的背景下,Go语言凭借并发处理能力,在后端开发中大放异彩,本文详细介绍如何使用Go语言对接微信支付,完成支付和退款功能,包括准备工作、初始化微信支付客户端、实现支付功能,以及处理支付回调和退款等
    2024-10-10
  • go语言的工作空间和GOPATH环境变量介绍

    go语言的工作空间和GOPATH环境变量介绍

    这篇文章主要介绍了go语言的工作空间和GOPATH环境变量介绍,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • GoFrame ORM原生方法操作示例

    GoFrame ORM原生方法操作示例

    这篇文章主要为大家介绍了GoFrame ORM原生方法操作示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Go语言中基本数据类型的相互转换详解

    Go语言中基本数据类型的相互转换详解

    Go在不同类型的变量之间赋值时需要显示转换,不能自动转换。这篇文章主要和大家介绍了Go语言中基本数据类型的相互转换,感兴趣的小伙伴可以了解一下
    2022-10-10
  • Go语言通过TCP协议实现聊天室功能

    Go语言通过TCP协议实现聊天室功能

    这篇文章主要为大家详细介绍了Go语言中如何通过TCP协议实现聊天室功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-04-04
  • golang顺时针打印矩阵的方法示例

    golang顺时针打印矩阵的方法示例

    这篇文章主要介绍了golang顺时针打印矩阵的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01

最新评论