«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему функции Go не могут возвращать несколько значений напрямую?

Почему функции Go не могут возвращать несколько значений напрямую?

Опубликовано 20 ноября 2024 г.
Просматривать:179

Why Can't Go Functions Return Multiple Values Directly?

Проблема с возвратом нескольких значений Go

При попытке вернуть несколько значений в Go может показаться непонятным, почему один синтаксис допустим, а другой нет. Чтобы проиллюстрировать это, рассмотрим следующие два фрагмента кода:

func FindUserInfo(id string) (Info, bool) {
    it, present := all[id]
    return it, present
}

Первый фрагмент кода действителен и возвращает значения Info и bool. Однако второй фрагмент недействителен:

func FindUserInfo(id string) (Info, bool) {
    return all[id]
}

В связи с этим возникает вопрос, почему первый фрагмент действителен, а второй нет. Кроме того, можно задаться вопросом, есть ли способ избежать использования таких временных переменных, как this и Present.

Объяснение шаблона «Запятая ок»

Ключ к пониманию этого поведения лежит в ок» шаблон. В Go при доступе к карте результатом является пара значений: значение, связанное с ключом, и логическое значение, указывающее, существует ли ключ на карте. Это часто используется, чтобы отличить отсутствующий ключ от нулевого значения.

В первом фрагменте кода выражение all[id] возвращает пару значений, которые ему присвоены и присутствуют. Затем оператор return возвращает эти значения.

Соображения компилятора

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

В случае второго фрагмента кода выражение return all[id] возвращает только одно значение, что несовместимо. с двумя переменными в левой части. Следовательно, компилятор сообщает об ошибке.

Избегание временных переменных

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

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3