学习Golang中的Sprint, Sprintln, Sprintf(附代码示例)

1,102 阅读3分钟

学习GolangSprint, Sprintln, Sprintf

fmt 包有一些方法,如Print,PrintlnPrintf ,用来打印文本到标准输出设备。

它也有相应的方法来返回将被打印出来的字符串,而不是真的打印出来。之后,程序可以将返回的值用于任何目的,例如发送电子邮件或创建一个PDF文件。

Sprint

返回一个包含输入参数的字符串。不会自动添加空格或换行字符。

例如:

 package main

import (
  "fmt"
)

func main() {
  quantity := 10
  fruits := "apples"
  text := fmt.Sprint("I have ", quantity, " ", fruits, ".")
  fmt.Printf("Value stored in text is: '%v'\n", text)
}

打印出来:

I have 10 apples.

注意,Printf 语句打印出的是单引号之间的text 变量的值。而text 变量则包含了Sprint 语句的结果。

还注意到在需要的地方是如何明确地添加空格的。

Sprintln

Sprintln 方法返回一个包含输入参数的字符串,用空格分隔。一个新的行字符被添加到字符串的末尾。

比如说:

package main

import (
  "fmt"
)

func main() {
  quantity := 10
  fruits := "apples"
  text := fmt.Sprintln("I have", quantity, fruits)
  fmt.Printf("Value stored in text is: '%v'\n", text)
}

打印出来:

Value stored in text is: 'I have 10 apples
'

与上面的Sprint 的例子相比,注意到没有必要添加明确的空格,因为它们是自动添加的。这也使得在前面没有空格的情况下添加尾部句号变得很困难,所以我把它从例子中删除了。

请注意Printf 的输出是如何在单引号之间打印text 变量的值的。这使得在text 字符串的末尾有一个换行符是明显的。

Sprintf

Sprintf 方法返回一个格式化的字符串。它根据格式指定器(第一个参数)插值出一个值的列表。它支持与Printf方法相同的格式化动词和修改器。

例如:

package main

import (
  "fmt"
)

func main() {
  quantity := 10
  fruits := "apples"
  text := fmt.Sprintf("I have %d %s.", quantity, fruits)
  fmt.Printf("Value stored in text is: '%v'\n", text)
}

打印出来:

Value stored in text is: 'I have 10 apples.'

注意到Sprintf 的第一个参数是格式指定符,有两个动词(%d%s)作为占位符,还有两个其他参数被传递,每个参数提供这些动词中的一个值。

Sprintf 与上面的例子相比较,我们能够完全按照我们想要的格式化字符串,而不需要添加额外的空格参数--代价是我们必须学习一些简单的格式化动词。

经验之谈

将字符串打印到控制台是很有用的,例如用于创建一个基本的命令行界面,或者用于调试目的。

从一个或多个值生成一个格式化的字符串,并将其赋值给一个变量,通常会更有用。这样一来,产生的字符串值就可以在以后的程序中使用。例如,用于构成程序将要发送的电子邮件的文本,或将要生成的PDF文件的内容。

在上述三种方法中,Sprintf 是最强大和最灵活的。SprintSprintln 比较简单,如果你只需要串联,可以是一个不错的选择。

根据你的经验,格式化字符串的其他用途是什么?