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, которая преобразует и возвращает входящее число в строку

Как с вами связаться? 🙃

Команда проекта находится в телеграм-сообществе по ссылке https://ttttt.me/HexletLearningBot. Там можно задать любой вопрос и повлиять на проект

Упражнение не проходит проверку — что делать? 😶

Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник". Как правильно задать вопрос:

В моей среде код работает, а здесь нет 🤨

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя 🤔

Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно 🙄

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

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются

Привет! Я Тота и моя задача помочь в обучении. Чтобы активировать меня, нужно зарегистрироваться или залогиниться, если у вас уже есть аккаунт

Loading...

Ваше упражнение проверяется по этим тестам

1package solution
2
3import (
4	"testing"
5
6	"github.com/stretchr/testify/assert"
7)
8
9func TestIntToString(t *testing.T) {
10	a := assert.New(t)
11	a.Equal("0", IntToString(0))
12	a.Equal("-42", IntToString(-42))
13	a.Equal("100500", IntToString(100500))
14}
15

Решение учителя откроется через:

20:00
waiting_clock