在 Go 语言中,fmt 包提供了一些常用的占位符,用于格式化不同类型的输出。
1. %s - 字符串
用于输出字符串(如果是切片,则输出其字节内容)。
go
fmt.Printf("%s\n", "hello") // hello
2. %v - 默认格式
这个占位符会使用默认格式打印值。
对于结构体、数组、切片等复杂类型,%v 会以一种通用的方式显示它们。
go
fmt.Printf("%v\n", 123) // 123
fmt.Printf("%v\n", "hello") // hello
fmt.Printf("%v\n", []int{1, 2, 3}) // [1 2 3]
3. % w
在 Go 语言中,%w 是 fmt 包中的一个占位符,主要用于 fmt.Errorf 函数中,用来包装错误。它的作用是将一个错误对象嵌套在新的错误消息中,并保持原始错误的上下文。
具体来说,%w 占位符的使用场景通常是为了创建一个新的错误对象,同时保留原始的错误,便于后续的错误处理,比如判断错误的类型或链式错误追踪。
判断原始错误,方便定位:
go
package main
import (
"errors"
"fmt"
)
func main() {
// 创建一个原始的错误
originalErr := errors.New("original error")
// 使用 %w 来包装原始错误
err := fmt.Errorf("wrapped error: %w", originalErr)
// 打印包装后的错误
fmt.Println(err)
// 使用 errors.Is 来判断原始错误
if errors.Is(err, originalErr) {
fmt.Println("The error is the original error")
}
}