Go: Функции
Функции в Go объявляются через ключевое слово func
:
func multiply(x int, y int) int {
return x * y
}
Объявление функции состоит из следующих частей:
— ключевое слово func
— название функции multiply
— входящие аргументы (x int, y int)
. Тип аргументов пишется после названия переменной. Если несколько аргументов подряд имеют одинаковый тип, то можно написать сокращенно (x, y int)
— тип возвращаемого значения int
— тело функции { return x * y }
Функции именуются в camelCase
. Если первая буква заглавная, то функция экспортируемая (публичная) и доступна в других пакетах. Функции с маленькой буквы используются только в рамках текущего пакета:
package math
// публичная функция, можно вызвать извне как math.Multiply(5,7)
func Multiply(x int, y int) int {
...
}
// приватная функция, извне не вызвать
func divide(x int, y int) int {
...
}
Из одной функции можно возвращать несколько значений. Чаще всего это используется для возвращения ошибок:
package math
import "errors"
func divide(x, y int) (int, error) {
if y == 0 {
return 0, errors.New("cannot divide on zero")
}
return x / y, nil
}
Возвращаемые значения могут быть именованными:
func multiply(x, y int) (res int) {
res = x * y
return
}
Использовать именованные возвращаемые аргументы — плохая практика. На это есть несколько причин:
— увеличенное расстояние между объявлением и использованием переменной ведет к сложности в чтении и понимании кода
— переменная может быть несколько раз переопределена в теле функции, что приводит к неожиданному поведению
— пустой return
неявно возвращает аргументы
Естественно, код состоит не только из функций: чаще всего используется множество внешних библиотек. Чтобы использовать внешнюю функцию, нужно указать пакет и через .
вызвать публичную функцию. Например:
import "fmt"
func myPrint(msg string) {
// пакет.функция
fmt.Println(msg)
}
Задание
В Go есть стандартная библиотека strconv
для конвертации чисел в строки и наоборот. Пример использования:
s := strconv.Itoa(-42) // "-42"
Напишите функцию IntToString, которая преобразует и возвращает входящее число в строку
Упражнение не проходит проверку — что делать? 😶
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет 🤨
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя 🤔
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно 🙄
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.