Возврат нескольких значений
Часть раздела Основы путешествия по GO на Coddy — урок 56 из 109.
Функции Go могут возвращать несколько значений одновременно, что крайне полезно для возврата как результатов, так и информации об ошибках.
Создайте функцию, которая возвращает и частное, и остаток:
func divide(a, b int) (int, int) {
quotient := a / b
remainder := a % b
return quotient, remainder
}
func main() {
q, r := divide(7, 3)
fmt.Println("7 ÷ 3 =", q, "with remainder", r)
}Когда вы запустите эту программу, она выведет:
7 ÷ 3 = 2 with remainder 1Функция возвращает два значения, разделенные запятыми, и мы получаем оба значения, используя несколько переменных в операции присваивания.
Если вам нужно только одно из возвращаемых значений, вы можете использовать пустой идентификатор _, чтобы игнорировать другое. Например, чтобы получить только частное:
q, _ := divide(7, 3)
fmt.Println("Quotient:", q)_ отбрасывает остаток, чтобы компилятор не выдавал ошибку о неиспользуемой переменной.
Задание
НовичокВ этом испытании вы попрактикуетесь в возврате нескольких значений из функции в Go.
У нас есть функция с именем getPersonInfo, которая должна возвращать имя человека, возраст и информацию о том, является ли он студентом. Ваша задача — завершить функцию, добавив соответствующий оператор возврата.
Шпаргалка
Функции в Go могут возвращать несколько значений одновременно. Укажите несколько типов возвращаемых значений в скобках и возвращайте несколько значений через запятую:
func divide(a, b int) (int, int) {
quotient := a / b
remainder := a % b
return quotient, remainder
}Получайте несколько возвращаемых значений, используя несколько переменных при присваивании:
q, r := divide(7, 3)Попробуйте сами
package main
import "fmt"
// Эта функция должна возвращать три значения: name, age и isStudent
func getPersonInfo() (string, int, bool) {
// Переменные уже определены для вас
name := "Alex"
age := 25
isStudent := true
// TODO: Верните все три значения (name, age, isStudent)
}
func main() {
// Вызовите функцию и сохраните возвращаемые значения
name, age, isStudent := getPersonInfo()
// Выведите значения
fmt.Printf("Name: %s\n", name)
fmt.Printf("Age: %d\n", age)
fmt.Printf("Is Student: %t\n", isStudent)
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Операторы сравнения и логические операторы
Операторы сравнения — Часть 1Операторы сравнения — Часть 2Логический оператор ANDЛогический оператор ORЛогический оператор NOTОсновы приоритета операторовИтоги: выполнение сравнений7Управляющие конструкции: Циклы
Что такое цикл `for`Цикл `for` — основыЦикл `for` — только условиеКлючевое слово `break`Ключевое слово `continue`Вложенные циклыИтоги — повторение действий2Переменные и базовые типы данных
Что такое переменнаяВывод типов с помощью `:=`Целые числа (int)Числа с плавающей точкойЛогический тип (Booleans)СтрокиНулевые значения (Zero Values)КонстантыПравила именованияИтоги: переменные и типы5Основы ввода-вывода
Форматированный выводСпецификаторы форматаВывод типовБазовый ввод данных пользователемИтоги: ввод и вывод8Функции
Понимание функцийОбъявление функцииВызов функцийПараметры функцииВозврат одного значенияВозврат нескольких значенийИменованные возвращаемые значенияОсновы области видимости функцийИтоги — создание переиспользуемого кода3Базовые операторы
Арифметические операторыОператор деленияОператор остатка от деленияОператор присваиванияКомбинированные операторы присваиванияИнкремент и декрементПовторение — Вычисления6Управление потоком: Условные конструкции
Оператор `if`Ключевое слово `else`Ключевое слово `else if`Затенение переменных в `if`Инициализация переменныхОператор `switch`Switch с выражениямиSwitch без выраженийКлючевое слово `fallthrough`Итоги — Принятие решений