亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

為什么要創建一個函數,該函數返回一行執行相同操作的函數?

為什么要創建一個函數,該函數返回一行執行相同操作的函數?

Go
守著一只汪 2023-03-15 15:38:13
我試圖通過研究各種公共代碼來理解各種編碼架構。其中之一是mime/multipartGo 團隊的實施。下面的片段是我所看到的。https://cs.opensource.google/go/go/+/refs/tags/go1.19.3:src/mime/multipart/formdata.go;l=156func (r *Reader) ReadForm(maxMemory int64) (*Form, error) {    return r.readForm(maxMemory)}func (r *Reader) readForm(maxMemory int64) (_ *Form, err error) {    form := &Form{make(map[string][]string), make(map[string][]*FileHeader)}    defer func() {        if err != nil {            form.RemoveAll()        }    }()    // Reserve an additional 10 MB for non-file parts.    maxValueBy...more code here我已經通讀了一些關于 SOLID、DRY、公共/私人關系的內容,所以我不能說我知道很多最佳實踐/常見策略。看看上面的內容,在我看來它是一個將私有函數公開的函數。我唯一想到的是它純粹是為了文檔?但在我的腦海里沒有什么具體的。所以我在這里很難理解的是這樣做的好處是什么?感謝大家花時間閱讀本文。非常感謝任何評論/閱讀建議。
查看完整描述

1 回答

?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

這是為了文檔。公關評論解釋說:

命名的返回值只應在對文檔有貢獻時用于公共函數和方法。

如果命名返回值只是在函數體內為程序員節省幾行代碼,則不應使用命名返回值,特別是如果這意味著文檔中存在斷斷續續的情況,或者它只是為了讓程序員可以使用裸返回語句. (除非在非常小的函數中,否則不應使用裸返回)

此更改是對公共函數簽名的手動審核和清理。

要隱藏返回值名稱,原始函數


func (r *Reader) ReadForm(maxMemory int64) (f *Form, err error) {

   ?

}

改為


func (r *Reader) ReadForm(maxMemory int64) (*Form, error) {

    return r.readForm(maxMemory)

}


func (r *Reader) readForm(maxMemory int64) (_ *Form, err error) {

   ?

}

錯誤返回值名稱無法消除,因為 延遲函數訪問錯誤返回值。


查看完整回答
反對 回復 2023-03-15
  • 1 回答
  • 0 關注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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