golang中逗號ok模式_轉


,ok,第一個參數是一個值或者nil,第二個參數是true/false或者一個錯誤error。在一個需要賦值的if條件語句中,使用這種模式去檢測第二個參數值會讓代碼顯得優雅簡潔。這種模式在go語言編碼規范中非常重要。下面總結了所有使用這種模式的例子:

1. 在函數返回時檢測錯誤

value, err := pack1.Func1(param1)

if err != nil {
    fmt.Printf(“Error %s in pack1.Func1 with parameter %v”, err.Error(), param1)
    return err
}

// 函數Func1沒有錯誤:
Process(value)

e.g.: os.Open(file) strconv.Atoi(str)

這段代碼中的函數將錯誤返回給它的調用者,當函數執行成功時,返回的錯誤是nil,所以使用這種寫法:

func SomeFunc() error {
    …
    if value, err := pack1.Func1(param1); err != nil {
        …
        return err
    }
    …
    return nil
}

這種模式也常用於通過defer使程序從panic中恢復執行。

2. 檢測映射中是否存在一個鍵值:key1在映射map1中是否有值?

if value, isPresent = map1[key1]; isPresent {
        Process(value)
}

3. 檢測一個接口類型變量var是否包含了類型T:類型斷言

if value, ok := var.(T); ok {
    Process(value)
}
// 接口類型varI沒有包含類型T

4. 檢測一個通道ch是否關閉

    for {
        if input, open := <-ch; !open {
            break // 通道是關閉的
        }
        Process(input)
    }

 

轉自:Go入門指南  看雲


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM