Добро пожаловать обратно! Ранее я обсуждал базовую программу Golang и типы данных. Сегодня я буду обсуждать, как управляющие структуры и функции работают в Golang.
Структуры управления
За:
При работе с циклами в Golang и Java Java предоставляет управляющие структуры в виде циклов while, do-while (реквизит, если вы достаточно смелы, чтобы использовать это) и циклов for. В то время как Golang предоставляет только цикл for, это может привести к тому, что ваши навыки программирования не будут универсальными, но преимущество этого будет заключаться в том, что вы не будете беспокоиться о том, какие реализации цикла вам понадобятся.
Простой цикл for в Golang будет выглядеть примерно так:
i := 0 for i <= 5{ fmt.Println(i) i++ } //or for i:=0; i <= 10;i++{ fmt.Println(i) }
Первый способ реализации цикла for очень похож на цикл while в Java, поэтому, хотя можно сказать, что в Golang есть только один тип цикла, это правда, цикл for в Golang можно переписать, чтобы он соответствовал любому типу цикла, который программист все равно понадобится.
Переключатели:
Оператор switch в Golang выглядит почти так же, как в Java, и функции у него идентичны. Каждый случай можно сократить до одной строки, иначе никакой реальной разницы.
switch menu{ case "burger": fmt.println("You ordered a burger!") case "soda": fmt.println("You ordered a soda!") case "sword?": fmt.println("It's dangerous to go alone...") }
Функции
Простая функция
Функции в Golang можно создавать с помощью ключевого слова func, давая ему имя вместе с любыми заданными входными параметрами.
Типичная функция будет выглядеть примерно так
int i = 1 func addI(i int)(int){ y := i+i return y }
Обратите внимание, что есть вторая скобка. Это используется для указания возвращаемого значения (значений) функции при условии, что они есть.
Несколько возвращаемых значений
Функции в Golang немного особенные, поскольку функция может возвращать одно или несколько значений.
func main() { a,b,c := findNumbers(); fmt.println(a) fmt.println(b) fmt.println(c) } func findNumbers()(int, int, int){ x := 1 y := 3 z := 5 }
В этом случае скобки, определяющие тип возвращаемого значения, имеют 3 типа, все целые числа. Возвращаемые значения зависят от порядка, поэтому важно отметить, что если возвращаемые типы состоят из строки, int, int, то они будут возвращены в этом порядке.
Может быть случай, когда не все значения из функции необходимы, и если они назначены переменной, которая никогда не будет использоваться, компилятор Golang любезно попросит вас избавиться от нее. В этом случае можно использовать символ подчеркивания _. Когда символ подчеркивания используется вместе с несколькими возвращаемыми типами, он информирует компилятор о том, что это значение не требуется и его следует игнорировать.
Для приведенного выше примера:
func main() { _,b,c := findNumbers(); fmt.println(b) fmt.println(c) }
Поэтому вместо того, чтобы возвращать каждое отдельное значение функции, возвращаются только второе и третье значения. Здесь снова важен порядок, размещение подчеркивания в середине приведет к игнорированию второго возвращаемого значения.
Отложить
Defer является особенным для Golang, и когда вызывается defer, функция, вызывающая отложенные вызовы, гарантированно запускается до окончания функции. Это может быть полезно, чтобы гарантировать, что вещи, которые должны быть закрыты в конце функции, действительно закрыты.
func openFile(input string) string { var result string file, err := os.Open("line.txt") if err != nil{ log.Fatal(err) } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan(){ result = scanner.Text() } if, err := scanner.Err(): err != nil{ log.Fatal(err) } return result }
Нужно многое понять, но openFile открывает файл с именем «line.txt» с помощью пакета «os», затем читает и возвращает текст в файле. Поскольку я уже вызывал defer close в самом начале, нет необходимости вызывать метод os.close() где-то в конце функции (хотя можно было бы, если бы вы чувствовали паранойю, что файл никогда не закроется).
Вывод
Вот и все на сегодня, краткий обзор того, что мы сделали:
- Структуры управления
- Функции и несколько возвратов
- Отложить
Как и раньше, если вы хотите прочитать больше, ниже приведены ресурсы, предоставленные
https://www.golang-book.com/books (конкретно главы 5,7)