Go 学习笔记:字符串格式化

1,805 阅读2分钟

Go 是一种强类型语言,字符串格式化是一种将值转换为字符串的过程。在 Go 中,字符串格式化通常使用 fmt 包提供的 Printf / Sprintf / Fprintf 函数。

格式化字符串

在 Go 中,格式化字符串是一种指定字符串中包含占位符的方式,占位符会在字符串中被替换为相应的值。例如,以下代码将使用 %s 占位符将字符串 world 插入到字符串 hello %s 中:

fmt.Printf("hello %s", "world")

输出结果为:

hello world

在上面的示例中,%s 是一个占位符,它表示将要插入的字符串。在实际的应用程序中,我们可以使用不同的占位符来插入不同类型的值。

以下是一些常用的占位符:

  • %v:插入值的默认格式。
  • %d:插入整数
  • %f:插入浮点数
  • %s:插入字符串
  • %t:插入布尔值
  • %p:插入指针的十六进制表示

以下是一个使用不同占位符的例子:

fmt.Printf("value=%v, integer=%d, float=%f, string=%s, boolean=%t, pointer=%p\\n", 42, 23, 3.14159, "hello", true, &fmt.Printf)

输出结果为:

value=42, integer=23, float=3.141590, string=hello, boolean=true, pointer=0x10f0d40

字符串拼接

除了使用格式化字符串之外,还可以使用 + 运算符将字符串拼接起来。但是,由于字符串是不可变的,每次拼接都会创建一个新的字符串对象。因此,如果进行大量的字符串拼接操作,可能会影响性能。

为了解决这个问题,Go 提供了 strings.Builder 类型,它提供了一种高效的方式来拼接字符串。以下是一个使用 strings.Builder 的例子:

var builder strings.Builder
builder.WriteString("hello")
builder.WriteString(" ")
builder.WriteString("world")
fmt.Println(builder.String())

输出结果为:

hello world

Printf / Sprintf / Fprintf 这三个方法有什么区别

fmt.Printffmt.Fprintffmt.Sprintf 都是 Go 中用于格式化字符串的函数,它们之间的区别在于输出的目的地不同。

  • fmt.Printf 将格式化后的字符串输出到标准输出设备(通常是控制台)
  • fmt.Fprintf 将格式化后的字符串输出到指定的输出流,可以是文件或网络连接等
  • fmt.Sprintf 将格式化后的字符串返回,而不输出到标准输出设备

因此,fmt.Sprintf 可以用于将格式化后的字符串存储在变量中,而 fmt.Printf 通常用于将格式化后的字符串输出到控制台。

总结

Go 中的字符串格式化是一种将值转换为字符串的过程,通常使用 fmt 包提供的 Printf / Sprintf / Fprintf 三个函数。格式化字符串可以包含占位符和格式化选项,用于指定字符串中要插入的值的格式。如果需要进行字符串拼接,可以使用 + 运算符或 strings.Builder 类型。