考虑以下简单的base64解码代码片段:
这会按预期生成hello。 现在,如果我有意传入损坏的输入,例如。
然后我按下了紧急线路,它给了我:
package main
import (
"fmt"
"encoding/base64"
)
func main() {
const encoded string = "aGVsbG8=" // hello
decoded, err := base64.StdEncoding.DecodeString(encoded)
if err != nil {
panic(err)
}
fmt.Println(string(decoded))
}
这会按预期生成hello。 现在,如果我有意传入损坏的输入,例如。
const encoded string = "XXXXXaGVsbG8="
然后我按下了紧急线路,它给了我:
panic: illegal base64 data at input byte 11
goroutine 1 [running]:
main.main()
/tmp/sandbox422941756/main.go:12 +0x140
看起来根据源代码和这个问题,除了匹配字符串文字并向调用者返回更有意义的错误消息外,似乎没有太多可做的了:
if err != nil {
if strings.Contains(err.Error(), "illegal base64 data at input byte") {
panic("\nbase64 input is corrupt, check service Key")
}
}
除了字符串匹配,还必须有更优雅的方法来实现这一点。如何用类似于Go的方式来实现呢?