golang fmt包格式化verb錯誤處理

使用*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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章