首頁 > 後端開發 > Golang > 隱式類型的類型反射如何運作?

隱式類型的類型反射如何運作?

王林
發布: 2024-02-06 09:30:08
轉載
953 人瀏覽過

隱式類型的類型反射如何運作?

問題內容

就我了解,go 是靜態型別的,通常不進行隱含型別轉換。因此,沒有顯式類型聲明的常數是根據首次使用時的要求而定的。

因此,在下面的程式碼片段中,我希望 nfloat64,因為這就是 math.sin 所期望的。但是當列印出反射類型時,我看到了 int

package main

import (
    "fmt"
    "math"
    "reflect"
)

func main() {
    const n = 5000 // No explict type

        // fmt.Println(reflect.TypeOf(n)) // this would print "int"

    fmt.Println(math.Sin(n)) // math.Sin expects a float64

    fmt.Println(reflect.TypeOf(n)) // print "int"
}
登入後複製

這裡到底發生了什麼事? n 其實有隱式 int 型別嗎?或者反射不會顯示這樣的實際類型情況?我不認為 math.sin 正在對其參數進行類型轉換,因為如果我指定顯式類型,編譯器會拋出錯誤。


正確答案


[無型別常數的型別]依首次使用時的要求而定。

這就是你理解錯誤的地方。每種用途都會獨立選擇一種類型。

math.Sin 需要 float64 參數,因此編譯器必須在此處選擇 float64。

reflect.TypeOf 採用 interface{} 參數,因此編譯器可以自由選擇任何數字類型(因為它們都實作空介面)。這裡選擇了預設的整數類型:int。

以上是隱式類型的類型反射如何運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板