1. mismatched types int32 and time.Duration)

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

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

    然后提示错误:

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

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

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

    这样就对了。

  2. string <-> float

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

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

      s := fmt.Sprintf("%f", 123.456) // s == "123.456000"