为了账号安全,请及时绑定邮箱和手机立即绑定

为什么要创建一个函数,该函数返回一行执行相同操作的函数?

为什么要创建一个函数,该函数返回一行执行相同操作的函数?

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 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信