Зачем создавать функцию, которая возвращает одну строку функции, которая делает то же самое?

Я пытаюсь понять различные архитектуры кодирования, изучая различные общедоступные коды. Одним из них является реализация mime/multipart командой Go.

Фрагмент ниже - это то, что я видел. https://cs.opensource.google/go/go/+/refs/tags/go1.19.3:src/mime/multipart/formdata.go;l=156

func (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, публичных/частных отношениях, поэтому не могу сказать, что знаю много лучших практик/общих стратегий.

Глядя на вышеизложенное, мне кажется, что это функция, которая делает частную функцию общедоступной.

Единственное, что приходит мне на ум, это то, что это чисто ради документации? Но ничего конкретного на мой взгляд.

Итак, что я изо всех сил пытаюсь понять, так это то, в чем польза от этого?

Спасибо всем, что нашли время, чтобы прочитать это. Любые комментарии / предложения по чтению очень ценятся.

Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
1
0
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это ради документации. В PR-комментарии поясняется:

Именованные возвращаемые значения следует использовать только в общедоступных функциях и методах, если они используются в документации.

Именованные возвращаемые значения не следует использовать, если они экономят программисту всего несколько строк кода внутри тела функции, особенно если это означает, что в документации есть заикание или оно было только там, чтобы программист мог использовать голый оператор возврата. . (Голые возвраты не должны использоваться, кроме как в очень маленьких функциях)

Это изменение представляет собой ручной аудит и очистку сигнатур общедоступных функций.

Чтобы скрыть имена возвращаемых значений, исходная функция

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) {
   ⋮
}

Имя возвращаемого значения ошибки не может быть устранено, поскольку отложенная функция обращается к возвращаемому значению ошибки.

Другие вопросы по теме