【Golang】Go語言那些返回值數(shù)量變化的語句?

package main

import (
    "fmt"
    "math"
)

func main() {
    var a interface{}
    a = "I am OK"
    a = 23.87

    //第一種情況
    //類型斷言
    b,ok := a.(string)
    if ok {
        fmt.Println(b)
    }

    //--------------
    r,err := a.(float64)
    if err {
        fmt.Println(math.Pi * r * r)
    }
    
    //第二種情況
    //map取值
    m := map[string]int{
        "math" : 95,
        "langue" : 90,
        "english" : 89,
    }
    result := m["langue"]
    fmt.Println(result)

    //-------------
    var exit bool
    result, exit = m["english"]
    if exit {
        fmt.Println(result)
    }

    //第三種情況slice/map
    s := []string{"hello", "world", "golang"}
    for k := range s{
        fmt.Print(k)
    }
    //output: 012   為索引值

    var m map[string]int = map[string]int{
      "golang": 1,
      "c++":    2,
      "python": 3,
    }

    for k := range m{
      fmt.Println(k)
    }
    //output:golang 
}

對(duì)于類型斷言的補(bǔ)充說明:

  • 如果類型斷言出錯(cuò)(就是判斷失敗的情況),第二個(gè)返回值一定要顯式申明或者忽略,否則編譯器會(huì)拋出exit status 2,并終止編譯,例如:

    b,ok := a.(string)              //如果類型判斷錯(cuò)誤,則b為相應(yīng)判斷類型的零值,而ok為bool類型的false
    b,_  := a.(float64)
    
  • 而在類型斷言成功的話,第二個(gè)返回值可以不用接受,程序正常運(yùn)行

也就是說,如果這個(gè)斷言不成功的話,還沒有第二個(gè)接收者,那么就會(huì)panic。 如果斷言失敗,第二個(gè)接收者被拋棄,也就是_,那么程序不會(huì)panic

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容