【发布时间】:2017-07-02 21:42:15
【问题描述】:
考虑这个简单的base64解码sn-p:
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
查看source code 和this issue,除了匹配字符串文字并向调用者返回更有意义的错误消息外,似乎没有什么可做的了:
if err != nil {
if strings.Contains(err.Error(), "illegal base64 data at input byte") {
panic("\nbase64 input is corrupt, check service Key")
}
}
除了字符串匹配之外,必须有一种更优雅的方式来做到这一点。 go 式的实现方式是什么?
【问题讨论】:
标签: go error-handling base64