第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何更正“if”構(gòu)造中的類型比較

如何更正“if”構(gòu)造中的類型比較

Go
回首憶惘然 2022-06-27 10:46:07
我嘗試使用“反射”和“(類型)”var a float64 = 6.0if reflect.TypeOf(a) == float64 {    fmt.Printf("%T", a)}switch a.(type) {case float64:    fmt.Printf("%T", a)}但兩者都返回錯誤錯誤 1:float64 類型不是表達式錯誤 2:無法在非接口值 a 上輸入開關(guān)(float64 類型)
查看完整描述

1 回答

?
白豬掌柜的

TA貢獻1893條經(jīng)驗 獲得超10個贊

一個if語句只能與單個類型進行比較,因為它沒有像語句這樣的分支,并且您必須在這樣的語句switch中使用類型斷言if:


var i interface{}

i = 3.3 // store a float64 value in i


if f, ok := i.(float64); ok {

    fmt.Print("It's a float64 value: %.2f", f)

} else {

    fmt.Println("Not float64")

}

這將輸出(在Go Playground上嘗試):


It's a float64 value: 3.30

您也可以使用反射,但這里的類型斷言更有效且更慣用。作為參考,這是使用反射的樣子:


if reflect.TypeOf(i) == reflect.TypeOf(float64(0)) {

    fmt.Printf("It's a float64 value: %.2f", i)

} else {

    fmt.Println("Not float64")

}

輸出是一樣的。在Go Playground上試試這個。


請注意,當(dāng)我們使用類型斷言時,我們有一個f斷言類型 ( float64) 的變量,因此如果某些函數(shù)直接需要該類型的值,我們可以使用它。使用反射時,我們沒有這種類型的值,i“仍然”是 type interface{},我們可以使用它,因為fmt.Printf()它的值是interface{}。但是如果我們必須將它傳遞給需要的函數(shù)float64,我們?nèi)匀恍枰褂茫ǜ郊拥模╊愋蛿嘌裕拖裨诘谝粋€示例中一樣。


另請注意,僅當(dāng)您的輸入是接口類型時,使用類型斷言和類型切換才有意義,因為只有接口類型可能存儲不同/多個具體類型的值。


在具體類型(如您的示例中的值)上使用類型斷言或類型開關(guān)float64沒有任何意義,因為該值可能只是類型float64而沒有別的,所以語言規(guī)范首先不允許它。


查看完整回答
反對 回復(fù) 2022-06-27
  • 1 回答
  • 0 關(guān)注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號