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

Go语言精选

共 1496字,需浏览 3分钟

 · 2020-08-26

点击上方蓝色“Go语言中文网”关注我们,领全套Go资料,每天学习 Go 语言

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'
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 修饰的变量不会。这就可以解释上述代码中的疑惑了。

  • reference: https://hao.studygolang.com/golang_spec.html#id273

原文作者:joyousx

原文链接:https://www.jianshu.com/p/be3a9b901cb8



推荐阅读


学习交流 Go 语言,扫码回复「进群」即可


站长 polarisxu

自己的原创文章

不限于 Go 技术

职场和创业经验


Go语言中文网

每天为你

分享 Go 知识

Go爱好者值得关注


浏览 52
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报