为什么time.Sleep(5 * time.Second)工作正常,但是:
x := 180
time.Sleep(15 / x * 60 * time.Second)
Run Code Online (Sandbox Code Playgroud)
才不是?我收到类型不匹配错误(类型int64和time.Duration).鉴于错误,我更了解后者失败的原因而不是前者成功的原因.
Adr*_*ian 14
在Go中,数字文字(例如60)是无类型常量.这意味着它将被默默地强制为适合于使用它的操作的任何类型.所以当你说:
var x := 5 * time.Second
Run Code Online (Sandbox Code Playgroud)
然后将类型推断time.Second为a time.Duration,因此文字5也被视为a time.Duration.如果没有什么可以推断类型,它将采用一种类型("bool,rune,int,float64,complex128或string")并使用它.所以:
x := 180
Run Code Online (Sandbox Code Playgroud)
产量x的类型int.
但是,当你做一些操作涉及与一类的东西-喜欢,说一个变量x是一个int-那么你有两种类型,一个必须被转换为操作是合法的.
因此,对于最初的问题"什么时候int * time.Second工作,什么时候不在golang?",int * time.Second实际上从来没有在Go中工作.但是5 * time.Second不一样int * time.Second.
无类型常量采用其上下文所需的类型.
| 归档时间: |
|
| 查看次数: |
1818 次 |
| 最近记录: |