Добро пожаловать обратно! Ранее я обсуждал базовую программу 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)

https://golang.org/doc/efficient_go.html