1. mismatched types int32 and time.Duration)

    今天在写一段 Go 代码的时候,居然报了一个意料之外的错:

    1. time.sleep(time.Second * rand.Int())

    然后提示错误:

    1. invalid operation: rand.Int31n(1000) * time.Millisecond (mismatched types int32 and time.Duration)

    这就很蒙了,明明:time.Second * 1 都是正常的,为什么这样不行?于是就找了找,发现需要将 int 转换成 Duration,这个没理解为什么?

    1. time.Sleep(time.Second * time.Duration(rand.Int())

    这样就对了。

  2. string <-> float

    1. String 转换为 Float(适用于各种类型)

      1. f := "3.14159265"
      2. if s, err := strconv.ParseFloat(f, 32); err == nil {
      3. fmt.Println(s) // 3.1415927410125732
      4. }
      5. if s, err := strconv.ParseFloat(f, 64); err == nil {
      6. fmt.Println(s) // 3.14159265
      7. }
    2. Float 转换为 String

      1. s := fmt.Sprintf("%f", 123.456) // s == "123.456000"
  3. 去除字符串中非 Ascii 字符

    1. func main() {
    2. example := "#GoLangCode!$!"
    3. // Make a Regex to say we only want letters and numbers
    4. reg, err := regexp.Compile("[^a-zA-Z0-9]+")
    5. if err != nil {
    6. log.Fatal(err)
    7. }
    8. processedString := reg.ReplaceAllString(example, "")
    9. fmt.Printf("A string of %s becomes %s \n", example, processedString)
    10. }
  4. bytes 转为 Reader

    1. r := bytes.NewReader(byteData)