Golang возвращает структурный указатель с помощью New () вместо непосредственного создания - PullRequest
0 голосов
/ 03 мая 2019

Я читаю этот репо код юнит-теста, и структура Client создается таким образом, которого я никогда раньше не видел.

type Client struct {
    // client stuff
}

// In client_test.go
// Creating default client for testing
c := dc()

// In resty_test.go
func dc() *Client {
    DefaultClient = New()
    DefaultClient.SetLogger(ioutil.Discard)
    return DefaultClient
}

Мой вопрос заключается в том, что такоецель возврата New()?Код ниже ведет себя так же, как стиль New()?Почему стоит выбирать одно над другим?

func dc() *Client {
    DefaultClient := Client{}
    return &DefaultClient
}

1 Ответ

0 голосов
/ 03 мая 2019

Функция New() является функцией конструктора для Client:

https://github.com/go-resty/resty/blob/63ac6744519b3b3e976256d87d7b097c3a2c8dbc/default.go#L25

Использование функции конструктора позволяет конструировать структуры с установленными значениями по умолчанию вместо использования нулевых значений для всех внутренних полей, как при выполнении Client{}. Например, максимальный размер тела в этом случае установлен на math.MaxInt32, а не на 0.

...