Golang 中一個 time.Duration 相關(guān)類型轉(zhuǎn)換問題
int (const 和非 const) 轉(zhuǎn)換為 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 修飾的變量如果沒有明確指明類型時,會根據(jù)需要做類型轉(zhuǎn)換; 而非 const 修飾的變量不會。這就可以解釋上述代碼中的疑惑了。
reference: https://hao.studygolang.com/golang_spec.html#id273
原文作者:joyousx
原文鏈接:https://www.jianshu.com/p/be3a9b901cb8
推薦閱讀
站長 polarisxu
自己的原創(chuàng)文章
不限于 Go 技術(shù)
職場和創(chuàng)業(yè)經(jīng)驗(yàn)
Go語言中文網(wǎng)
每天為你
分享 Go 知識
Go愛好者值得關(guān)注
評論
圖片
表情
