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)

猜你喜欢

转载自blog.csdn.net/u014270740/article/details/89353582