一、格式化输出
1、一般拼接输出
package main
import (
"fmt"
"strconv"
)
func main() {
username := "米粒"
age := 18
address := "上海"
mobile := "123456777"
fmt.Println("用户名:" + username + ", 年龄:" + strconv.Itoa(age) + ", 地址:" + address + ", 电话:" + mobile)
}
结果:
用户名:米粒, 年龄:18, 地址:上海, 电话:123456777
这种方式是通过字符串拼接来输出,使用 + 运算符将各个变量和固定字符串连接在一起,最后通过 fmt.Println 打印整个字符串。
2、格式化输出
2.1、第一种,直接输出
package main
import (
"fmt"
)
func main() {
username := "米粒"
age := 18
address := "上海"
mobile := "123456777"
fmt.Printf("用户名:%s, 年龄:%d, 地址:%s, 电话:%s\r\n", username, age, address, mobile)
}
结果:
用户名:米粒, 年龄:18, 地址:上海, 电话:123456777
这种方式使用 %s、%d 等格式化占位符,通过 Printf 函数直接输出格式化后的字符串。
2.2、第二种,拼接后再输出
package main
import (
"fmt"
)
func main() {
username := "米粒"
age := 18
address := "上海"
mobile := "123456777"
msg := fmt.Sprintf("用户名:%s, 年龄:%d, 地址:%s, 电话:%s\r\n", username, age, address, mobile)
fmt.Println(msg)
}
结果:
用户名:米粒, 年龄:18, 地址:上海, 电话:123456777
这种方式使用 Sprintf 函数将格式化后的字符串保存在一个变量中,然后通过 Println 函数打印这个变量。
3、格式化输出的各种格式
在 Go 语言中,格式化输出主要通过 fmt.Printf
函数实现,使用一系列的格式化占位符来定义输出的格式。以下是一些常用的格式化占位符及其详细解释:
常用的格式化占位符:
-
%v: 通用格式,将变量的默认格式输出。
-
%T: 变量的类型。
-
%d: 十进制整数。
-
%b: 二进制表示的整数。
-
%o: 八进制表示的整数。
-
%x: 十六进制表示的整数,使用小写字母。
-
%X: 十六进制表示的整数,使用大写字母。
-
%s: 字符串。
-
%q: 带有双引号的字符串。
-
%f: 浮点数,默认精度。
-
%e,%E: 科学计数法表示的浮点数,%e 使用小写字母,%E 使用大写字母。
-
%g,%G: 根据实际情况选择 %e 或 %f 以产生更紧凑的(无末尾的零)输出,%g 使用小写字母,%G 使用大写字母。
-
%t: 布尔值,true 或 false。
-
%p: 指针,以十六进制表示。
-
%%: 百分号本身。
举例:
package main
import "fmt"
func main() {
// 通用格式 %v
var num = 42
fmt.Printf("通用格式: %v\n", num)
// 类型 %T
var name = "Gopher"
fmt.Printf("类型: %T\n", name)
// 整数 %d, %b, %o, %x, %X
var age = 25
fmt.Printf("十进制: %d, 二进制: %b, 八进制: %o, 小写十六进制: %x, 大写十六进制: %X\n", age, age, age, age, age)
// 字符串 %s, %q
var city = "Beijing"
fmt.Printf("字符串: %s, 带引号的字符串: %q\n", city, city)
// 浮点数 %f, %e, %E, %g, %G
var salary = 50000.00
fmt.Printf("浮点数: %f, 科学计数法: %e, 大写科学计数法: %E, 自动选择: %g, 大写自动选择: %G\n", salary, salary, salary, salary, salary)
// 布尔值 %t
var isGoCool = true
fmt.Printf("布尔值: %t\n", isGoCool)
// 指针 %p
var ptr = &num
fmt.Printf("指针: %p\n", ptr)
// 百分号 %%
fmt.Printf("百分号: %%\n")
}
结果:
通用格式: 42
类型: string
十进制: 25, 二进制: 11001, 八进制: 31, 小写十六进制: 19, 大写十六进制: 19
字符串: Beijing, 带引号的字符串: "Beijing"
浮点数: 50000.000000, 科学计数法: 5.000000e+04, 大写科学计数法: 5.000000E+04, 自动选择: 50000, 大写自动选择: 50000
布尔值: true
指针: 0xc0000180d0
百分号: %
4、不同种输出的区别
性能
:
一般拼接输出(第一种方式)可能在大量字符串拼接时性能较差,因为每次 + 运算都会创建一个新的字符串。
格式化输出(两种方式)在大多数情况下性能更好,因为它们利用了格式化占位符直接构建最终字符串。
可读性
:
一般拼接输出相对直观,但可能随着连接的变量和字符串增多而变得难以维护。
格式化输出更具可读性,格式化占位符提供了清晰的结构,易于理解和修改。
错误检查
:
一般拼接输出和格式化输出都不涉及复杂的错误检查,但格式化输出的占位符可以提供一定程度的类型安全。
灵活性
:
格式化输出更灵活,可以轻松控制变量的格式、宽度等。