跳到主要内容

Go 字符串格式化

介绍

在Go语言中,字符串格式化是一种将数据转换为特定格式的字符串的技术。Go提供了强大的格式化工具,主要通过 fmt 包中的函数来实现。字符串格式化在输出日志、生成报告、构建用户界面等场景中非常有用。

Go语言中的字符串格式化主要通过 fmt.Printffmt.Sprintf 等函数来实现。这些函数使用格式化动词(format verbs)来指定如何格式化数据。

常见的格式化动词

以下是一些常见的格式化动词及其用法:

  • %v:默认格式,适用于任何类型的值。
  • %T:输出值的类型。
  • %d:输出十进制整数。
  • %f:输出浮点数。
  • %s:输出字符串。
  • %t:输出布尔值。
  • %p:输出指针地址。

示例代码

go
package main

import "fmt"

func main() {
name := "Alice"
age := 30
height := 5.7

fmt.Printf("Name: %s, Age: %d, Height: %.2f\n", name, age, height)
fmt.Printf("Type of name: %T\n", name)
fmt.Printf("Type of age: %T\n", age)
fmt.Printf("Type of height: %T\n", height)
}

输出:

Name: Alice, Age: 30, Height: 5.70
Type of name: string
Type of age: int
Type of height: float64

逐步讲解

1. 使用 %v 格式化

%v 是默认的格式化动词,适用于任何类型的值。它会根据值的类型自动选择合适的格式。

go
fmt.Printf("Value: %v\n", 42)
fmt.Printf("Value: %v\n", "Hello")
fmt.Printf("Value: %v\n", true)

输出:

Value: 42
Value: Hello
Value: true

2. 使用 %T 格式化

%T 用于输出值的类型。

go
fmt.Printf("Type: %T\n", 42)
fmt.Printf("Type: %T\n", "Hello")
fmt.Printf("Type: %T\n", true)

输出:

Type: int
Type: string
Type: bool

3. 使用 %d%f 格式化

%d 用于格式化整数,%f 用于格式化浮点数。你还可以指定浮点数的小数位数。

go
fmt.Printf("Integer: %d\n", 42)
fmt.Printf("Float: %.2f\n", 3.14159)

输出:

Integer: 42
Float: 3.14

4. 使用 %s%t 格式化

%s 用于格式化字符串,%t 用于格式化布尔值。

go
fmt.Printf("String: %s\n", "Hello")
fmt.Printf("Boolean: %t\n", true)

输出:

String: Hello
Boolean: true

5. 使用 %p 格式化

%p 用于格式化指针地址。

go
num := 42
fmt.Printf("Pointer: %p\n", &num)

输出:

Pointer: 0xc0000140a8

实际案例

案例1:生成日志信息

在日志记录中,字符串格式化非常有用。你可以使用 fmt.Sprintf 来生成格式化的日志信息。

go
package main

import (
"fmt"
"time"
)

func main() {
user := "Bob"
action := "login"
timestamp := time.Now().Format("2006-01-02 15:04:05")

logMessage := fmt.Sprintf("[%s] User '%s' performed '%s' action.", timestamp, user, action)
fmt.Println(logMessage)
}

输出:

[2023-10-05 14:30:00] User 'Bob' performed 'login' action.

案例2:生成报告

在生成报告时,字符串格式化可以帮助你以一致的格式输出数据。

go
package main

import "fmt"

func main() {
report := fmt.Sprintf("Sales Report\n============\nProduct: %s\nUnits Sold: %d\nRevenue: $%.2f\n", "Widget", 150, 4500.75)
fmt.Println(report)
}

输出:

Sales Report
============
Product: Widget
Units Sold: 150
Revenue: $4500.75

总结

Go语言中的字符串格式化功能非常强大,能够帮助你以各种格式输出数据。通过掌握常见的格式化动词,你可以在日志记录、报告生成等场景中灵活运用字符串格式化。

附加资源与练习

  • 练习1:编写一个程序,使用 fmt.Printf 输出你的姓名、年龄和身高,并确保浮点数保留两位小数。
  • 练习2:编写一个程序,使用 fmt.Sprintf 生成一个包含当前日期和时间的日志信息。
  • 附加资源:阅读 Go官方文档 中关于 fmt 包的更多内容,了解更多格式化动词及其用法。