1 回答
TA贡献1818条经验 获得超3个赞
在你的代码中:
您正在创建一个新缓冲区并将其分配给buff,因为您没有为其提供任何输入源,所以它是空的。
buff := new(bytes.Buffer)
并且NewDecoder正在从空读取buff。就像 go 中的所有东西一样,如果你想创建一个新的东西,你应该使用它的构造函数,它总是以package.Newxxx
bytes.NewBuffer(src)
然后decoder是一个包含实际解码数据的变量,它有一个reader interface(读取方法)。reader interface因此,您可以将它传递给接受, 并且ioutil.ReadAll()是其中之一的方法。
在必要时添加评论:
package main
import (
"bytes"
"encoding/base64"
"fmt"
"io/ioutil"
"log"
)
// encoded data
var data = "eyJhY3Rpdml0aWVzIjpbXSwic3VjY2VzcyI6ZmFsc2UsImNvZGUiOjk5OTl9"
func main() {
dec, err := decode([]byte(data))
if err != nil {
log.Println(err)
}
fmt.Println(string(dec)) // print returned value
}
func decode(enc []byte) ([]byte, error) {
// create new buffer from enc
// you can also use bytes.NewBuffer(enc)
r := bytes.NewReader(enc)
// pass it to NewDecoder so that it can read data
dec := base64.NewDecoder(base64.StdEncoding, r)
// read decoded data from dec to res
res, err := ioutil.ReadAll(dec)
return res, err
}
事实上,整个事情可以写在一行中:
func decode(enc []byte) ([]byte, error) {
return ioutil.ReadAll(base64.NewDecoder(base64.StdEncoding, bytes.NewReader(enc)))
}
输出:
{"activities":[],"success":false,"code":9999}
- 1 回答
- 0 关注
- 194 浏览
添加回答
举报