golang

  1. 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)

  1. 协程使用不当(不能正确让出cpu)导致的应用崩溃
go func() {
  for {
    select {
      case _ = <- chain:
        fmt.Println("用select阻塞 可以让出cpu防止程序崩溃")
    }
  }
}()
  1. 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')

你可能感兴趣的:(golang)