正確處理方法:
一、失敗的原因只有一個時,不使用error
##例如:func (self *AgentContext) CheckHostType(host_type string) error { switch host_type { case "virtual_machine": return nil case "bare_metal": return nil } return errors.New("CheckHostType ERROR:" + host_type) }我們可以看出,該函數失敗的原因只有一個,所以傳回值的型別應該是bool,而不是error,重構一下程式碼:
func (self *AgentContext) IsValidHostType(hostType string) bool { return hostType == "virtual_machine" || hostType == "bare_metal"}說明:大多數情況,導致失敗的原因不只一種,尤其是對I/O操作而言,使用者需要了解更多的錯誤訊息,這時的回傳值類型不再是簡單的bool,而是error。
二、沒有失敗時,不使用error
error在Golang中是如此的流行,以至於很多人設計函數時不管三七二十一都使用error,即使沒有失敗原因。 我們來看看範例程式碼:func (self *CniParam) setTenantId() error { self.TenantId = self.PodNs return nil}對於上面的函數設計,就會有下面的呼叫程式碼:
err := self.setTenantId() if err != nil { // log // free resource return errors.New(...) }根據我們的正確姿勢,重構一下程式碼:
func (self *CniParam) setTenantId() { self.TenantId = self.PodNs }於是呼叫程式碼變成:
self.setTenantId()
三、error要放在回傳值類型清單的最後
對於傳回值類型error ,用來傳遞錯誤訊息,在Golang中通常放在最後一個。resp, err := http.Get(url) if err != nil { return nill, err }bool作為傳回值類型時也是一樣。
value, ok := cache.Lookup(key) if !ok { // ...cache[key] does not exist… }
四、錯誤逐層傳遞時,層層都會加日誌
層層都加日誌非常方便故障定位。 相關文章教學推薦:以上是golang回傳錯誤時如何正確處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!