Golang 中一个 time.Duration 相关类型转换问题
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 修饰的变量不会。这就可以解释上述代码中的疑惑了。
reference: https://hao.studygolang.com/golang_spec.html#id273
原文作者:joyousx
原文链接:https://www.jianshu.com/p/be3a9b901cb8
推荐阅读
站长 polarisxu
自己的原创文章
不限于 Go 技术
职场和创业经验
Go语言中文网
每天为你
分享 Go 知识
Go爱好者值得关注
评论