package mainimport ( "bytes" "encoding/base64" "fmt" "io" "log" "os")func b(name string) { f, err := os.Open(name) if err != nil { log.Fatal(err) } defer f.Close() buf := new(bytes.Buffer) binval := base64.NewEncoder(base64.StdEncoding, buf) if _, err := io.Copy(binval, f); err != nil { log.Fatal(err) } fmt.Printf("%s\n", buf.String()[buf.Len()-5:])}func main() { b("soccer.jpg") b("soccer2.jpg")}足球.jpg 足球 2.jpg輸出:bodqhrohro@debian:/tmp$ go run base64.go nuNf/nuNf/第一個文件與第二個文件相同,只是刪除了最后一個字節(jié)。它們產(chǎn)生相同的 base64 字符串。怎么了?我用go1.15.9和go1.18.3體驗過。
1 回答

炎炎設(shè)計
TA貢獻1808條經(jīng)驗 獲得超4個贊
調(diào)用者必須關(guān)閉返回的編碼器以刷新任何部分寫入的塊。
所以:
binval.Close() // <- add this fmt.Printf("%s\n", buf.String()[buf.Len()-5:])
另請參閱文檔示例:
// Must close the encoder when finished to flush any partial blocks.
// If you comment out the following line, the last partial block "r"
// won't be encoded.
encoder.Close()
- 1 回答
- 0 關(guān)注
- 111 瀏覽
添加回答
舉報
0/150
提交
取消