学习GolangSprint, Sprintln, Sprintf
fmt 包有一些方法,如Print,Println 和Printf ,用来打印文本到标准输出设备。
它也有相应的方法来返回将被打印出来的字符串,而不是真的打印出来。之后,程序可以将返回的值用于任何目的,例如发送电子邮件或创建一个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 是最强大和最灵活的。Sprint 和Sprintln 比较简单,如果你只需要串联,可以是一个不错的选择。
根据你的经验,格式化字符串的其他用途是什么?