美文网首页
Golang 中一个 time.Duration 相关类型转换问

Golang 中一个 time.Duration 相关类型转换问

作者: joyousx | 来源:发表于2020-08-20 11:57 被阅读0次

    int (const 和 非const) 转换为 time.Duration

    这是一个常见的操作,但是我们会遇到以下代码中的问题,甚是疑惑~

    • 问题

          package main
          import (
              "fmt"
              "reflect"
              "time"
          )
          const a = 1
          func test(a time.Duration) {
              fmt.Printf("%v \n", a)
          }
          func main() {
              b := a + 1
              fmt.Printf("---- a = %v \n", reflect.TypeOf(a))
              test(a)
              fmt.Printf("---- b = %v \n", reflect.TypeOf(b))
              // test(b)  //> 打开注释后, 会编译不通过
          }
      
    • 原因

      Assignability
          A value x is assignable to a variable of type T ("x is assignable to T") if one of the following conditions applies:
              - x's type is identical to T.
              - x's type V and T have identical underlying types and at least one of V or T is not a defined type.
              - T is an interface type and x implements T.
              - x is a bidirectional channel value, T is a channel type, x's type V and T have identical element types, and at least one of V or T is not a defined type.
              - x is the predeclared identifier nil and T is a pointer, function, slice, map, channel, or interface type.
              - x is an untyped constant representable by a value of type T.  
      

    就是说,在 const 修饰的变量如果没有明确指明类型时,会根据需要做类型转换; 而非 const 修饰的变量不会。这就可以解释上述代码中的疑惑了。

    相关文章

      网友评论

          本文标题:Golang 中一个 time.Duration 相关类型转换问

          本文链接:https://www.haomeiwen.com/subject/gxysjktx.html