2014-12-05 26 views
2

據我所知(從here,以及從閱讀standerd庫),處理庫中的錯誤的idomatic方式返回您的數據和錯誤。返回結構時出現錯誤處理

問題是,當我運行時必須返回一個錯誤,我作爲數據返回什麼?一個空的結構? 0?

下面是一個例子

// Load the config 
func LoadConfig(location string) (Config, error) { 
    // Read the file 
    configFile, err := ioutil.ReadFile(location) 
    if err != nil { 
     return Config{}, err 
    } 

    // Convert it to Config struct 
    var config Config 
    json.Unmarshal(configFile, &config) 
    return config, nil 
} 

這是慣用的?

+0

除了你的問題(已經有一個很好的答案),有一點需要注意 - 在你的例子中,你當然也應該從'json.Unmarshal'返回錯誤。 – 2014-12-05 12:51:54

+0

@Not_a_Golfer謝謝,我錯過了那一個。 – giodamelio 2014-12-05 13:08:23

回答

3

取決於上下文。如果返回的類型是指針,則可以返回相應類型的空值或nil。但是如果這對函數有意義的話,你也可以將部分結果與錯誤一起返回。例如在bufioReader.ReadString中返回字符串和錯誤。該docs state

如果ReadString找到一個分隔符之前遇到錯誤,它會返回錯誤,錯誤本身(通常io.EOF)之前讀取數據。

+0

謝謝,那正是我的想法。 – giodamelio 2014-12-05 13:08:07