使用*printf函數的過程中,難免會有一些使用不當導致的錯誤,大致有如下類型:
1.錯誤的類型 例如:fmt.Printf("%d\n","string")
2.使用了未知的verb 例如:fmt.Printf("%z\n","string")
3.太多參數 例如::fmt.Printf("hello","world")
4.太少參數 例如:fmt.Printf("hello %s\n")
5.顯式指定的索引參數不存在 例如:fmt.Printf("%[3]",1,2)
6.如果自定義實現的Error和String方法觸發了panic
錯誤情況的處理
所有的錯誤都以字符串"%!"開始, 如果存在verb標識符 會緊跟一個verb標識符,並以加小括弧的描述結束。
具體例子如下:
type stringExtend string
func (s stringExtend) String() string {
panic("panic")
}
var se stringExtend = "stringExtend"
//錯誤類型
fmt.Printf("%s\n", 5) // %!s(int=5)
//錯誤類型
fmt.Printf("%d\n", "string") // %!d(string=string)
//參數太多
fmt.Printf("hello", "world") // hello%!(EXTRA string=world)
//參數太少
fmt.Printf("hello %s\n") // hello %!s(MISSING)
//指定索引參數不存在
fmt.Printf("%[3]d\n", 1, 2) // %!d(BADINDEX)
//觸發panic
fmt.Printf("%s\n", se) // %!s(PANIC=String method: panic)
//verb格式不存在
fmt.Printf("%z\n", se) // %!z(main.stringExtend=stringExtend)