- base64 & aes 加解密
base64.StdEncoding.DecodedLen
returns the maximum length in bytes of the decoded data 导致密文长度异常解密失败
// base64编码
cipherTextBase64 := make([]byte, base64.StdEncoding.EncodedLen(len(cipherText)))
base64.StdEncoding.Encode(cipherTextBase64, cipherTextRaw)
// base64解码
cipherText := make([]byte, base64.StdEncoding.DecodedLen(len(cipherTextWithBase64)))
_, err := base64.StdEncoding.Decode(cipherText, cipherTextWithBase64)
len(cipherText) > len(cipherTextRaw) == true
如何解决?
n, err := base64.StdEncoding.Decode(cipherText, cipherTextWithBase64)
cipherText[:n]
或者使用 base64.StdEncoding.DecodeToString(cipherTextWithBase64)
- 协程使用不当(不能正确让出cpu)导致的应用崩溃
go func() {
for {
select {
case _ = <- chain:
fmt.Println("用select阻塞 可以让出cpu防止程序崩溃")
}
}
}()
- bufio.Reader#ReadLine() 不一定会返回完整的一行数据
func readLine(r *bufio.Reader) ([]byte, error) {
var (
isPrefix = true
err error = nil
line, ln []byte
)
for isPrefix && err == nil {
line, isPrefix, err = r.ReadLine()
ln = append(ln, line...)
}
return ln, err
}
或者使用 bufio.Reader#ReadBytes('\n'), bufio.Reader#ReadString('\n')