duanpin2009 2017-07-02 10:53
浏览 762
已采纳

在Go中处理来自base64解码的错误

Consider this simple base64 decode snippet:

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))
}

This produces hello as expected. Now, if i intentionally pass in corrupt input, e.g.

const encoded string = "XXXXXaGVsbG8="

then i hit the panic line which gives me:

panic: illegal base64 data at input byte 11

goroutine 1 [running]:
main.main()
    /tmp/sandbox422941756/main.go:12 +0x140

Looking at the source code and this issue, seems there is not much to go by here other than matching the string literal and returning a more meaningful error message to the caller:

if err != nil {
    if strings.Contains(err.Error(), "illegal base64 data at input byte") {
        panic("
base64 input is corrupt, check service Key")
    }
}

There has to be a more elegant way to do this other than string matching. What is the go-esque way to achieve this?

  • 写回答

2条回答 默认 最新

  • douweng7083 2017-07-02 11:20
    关注

    Look at the error type. For example,

    package main
    
    import (
        "encoding/base64"
        "fmt"
    )
    
    func main() {
        encoded := "XXXXXaGVsbG8=" // corrupt
        decoded, err := base64.StdEncoding.DecodeString(encoded)
        if err != nil {
            if _, ok := err.(base64.CorruptInputError); ok {
                panic("
    base64 input is corrupt, check service Key")
            }
            panic(err)
        }
        fmt.Println(string(decoded))
    }
    

    Output:

    panic: 
    base64 input is corrupt, check service Key
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据