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

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

在 Golang 中使用另一個函數(shù)返回一個值?

在 Golang 中使用另一個函數(shù)返回一個值?

Go
喵喵時光機 2022-01-04 10:25:49
在 Go 中,是否可以僅使用函數(shù)返回?例如,我想檢查錯誤,而不是重復 if 語句,我只想調用一個函數(shù),例如checkErrors(err).這是一個例子(goplayground)func foobar(str string) err {    _, err := ioutil.ReadAll(resp.Body)    checkError(err) // If error != nil then foobar will return the err    /*if err != nil {        return err    }*/}func checkError(err error) {    if err != nil {        // Then make the function this is being called within return the err.    }}
查看完整描述

2 回答

?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

你的導師是對的:不要重復代碼。它被稱為DRY 主體

但是 Go 的作者在設計語言時采取了不同的方向。它破壞了開發(fā)社區(qū),引發(fā)了戰(zhàn)爭,扭曲了空間和時間。

這些方向之一是接受一點點復制,使代碼更易于閱讀。 正如您所注意到的,錯誤處理就是這樣一個領域。它邀請了一些重復的模式來檢查整個應用程序中的 nil,而不是抽象掉(并且很容易忽略)您應該做的真正的錯誤處理。

Rob Pike 在他的 GoLang 設計(和哲學)演講中談到了這個方向:

http://talks.golang.org/2012/splash.article

如果錯誤使用特殊的控制結構,錯誤處理會扭曲處理錯誤的程序的控制流。類 Java 風格的 try-catch-finally 塊交織多個重疊的控制流,這些控制流以復雜的方式交互。盡管相比之下 Go 使檢查錯誤更加冗長,但顯式設計使控制流保持直截了當——字面意思。

不是每個人都同意,這就是戰(zhàn)爭開始的原因。

但是,這些改變行業(yè)標準的決定給開發(fā)人員帶來了巨大的負擔,這正是他們這樣做的原因:您每次都被迫提前和集中處理每個錯誤。你不能忽視或讓其他東西來處理它。

并非所有人都同意。

我強烈建議您和您的 Tutur 閱讀有關 Go 設計的帖子。然后你們兩個可以決定寧Go是還是不去。


查看完整回答
反對 回復 2022-01-04
?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

只是為了添加已經很好的答案,您可以使您的checkError功能更加個性化,因此您仍然可以預先處理錯誤,同時仍然保持干燥:


func checkError(err error, handler func(e error)) {

    if err != nil {

        handler(err)

    }

}

通過這種方式,您可以傳入要用于每個錯誤的處理程序函數(shù),而不會忘記責任,同時節(jié)省兩行重復的錯誤處理代碼。


handler1 = func(e error) { 

        panic(e) 

}


handler2 = func(e error) {

        log.Fatal(e)

}


func foobar(str string) err {

    _, err := ioutil.ReadAll(resp.Body)

    checkError(err, handler2)

}


查看完整回答
反對 回復 2022-01-04
  • 2 回答
  • 0 關注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號