Голанг — Дьявол в деталях

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

Структуры. Все, кто имеет опыт работы с Java, знакомы с болью при написании конструкторов, охватывающих диапазон форматов ввода. Go дает вам простое решение для определения объектов в одной строке без необходимости писать десятки конструкторов. Ниже приведены несколько примеров того, как вы можете определять объекты в Go.

type Person struct{
   Id int
   Name string
   Age int
   Email string
}
func foo(){
   //Object with No arguments
   person1 := Person{}

   //Object with all arguments
   person2 := Person{Id:1,Name:"JaneDoe",Age:24,Email:"[email protected]"}
   //Object with partial arguments
   person3 := Person{Name:"JohnDoe"}
}

Массивы и фрагменты. Массивы в Go представляют собой набор объектов одного типа фиксированной длины, тогда как фрагменты — это коллекции переменной длины. В общем, срезы намного мощнее массивов и используются гораздо шире.

Массивы в Go — это набор объектов одного типа фиксированной длины. В Go массивы — это просто значения, поэтому, когда вы назначаете массив переменной или передаете значение функции, создается и передается копия массива. Массивы могут быть объявлены, указав размер в объявлении.

var arr1 = [5]int{}

Или позволив компилятору вычислить длину.

var arr2 = [...]int{1,2,3}

Доступ к длине массива можно получить с помощью встроенной функции len.

length := len(arr1)

Срезы в Go — это коллекции переменной длины с одинаковым типом данных. Go Slice — это мощная структура данных, построенная на основе массивов, с учетом простоты использования и масштабируемости. В отличие от массивов, срезы не имеют фиксированной длины. При объявлении среза вам не нужно указывать размер.

var sl1 = []int{}
var sl2 = []int{1,2,3}

Вы также можете создать фрагмент с параметрами length и capacity с помощью встроенной функции make.

//var sl3 = make([]int, length, capacity)
var sl3 = make([]int, 5, 5)

Если емкость не указана, по умолчанию используется значение длины.

//var sl4 = make([]int, length)
var sl4 = make([]int, 5)

А для доступа к длине и емкости среза можно использовать встроенные функции len () и cap ().

length := len(sl1)
capacity := cap(sl1)

Чтобы динамически добавлять значения в срез, мы можем просто добавить новое значение к существующему срезу.

sl2 = append(sl2, 4)

Для обхода массива или среза можно использовать простой цикл for с командой range. Здесь i представляет индекс массива, а значение представляет фактическое значение в массиве.

for i, val := range sl2 {
   ...
}

Мы также можем игнорировать индекс или значение, заменив их знаком подчеркивания.

for i, _ := range sl1 {
   ...
}

Фактически, приведенное выше утверждение совпадает со следующим.

for i := 0; i < len(sl2); i++ {
    ...
}

Карты: Карты в Go структурно похожи на срезы и могут быть определены либо с помощью функции make, либо путем прямого определения объекта типа map [keyType] valueType.

map1 := make(map[int]string)
map2 := map[int]string{}
map3 := map[int]string{1:"A", 2:"B"}

Значения на карте можно установить или получить к ним доступ, указав ключ в квадратных скобках [].

map1[key] = "Test"
value := map1[key]

Чтобы проверить, существует ли значение на карте, можно использовать оператор if с предварительным условием. Здесь ok — логическое значение, указывающее, существует ли ключ или нет.

if _, ok := map1[key];ok {
   ...
}

Go предоставляет встроенную функцию для удаления значений с карты.

delete(map1, key)

Длину карты можно получить так же, как фрагмент или массив.

n := len(map1)

Для перемещения по карте можно использовать простой цикл for с командой range.

for key, value := range map1 {
   ...
}

Условия: при объявлении блока условий в Go круглые скобки () вокруг условия можно игнорировать, но фигурные скобки {} для блока выполнения являются обязательными. Go имеет два типа условий: If / Else и Switch.

См. также:  20+ проблем с кодированием массивов и вопросов из собеседований по программированию

If / Else в Go похож на любой другой язык, с одним отличием в том, что в дополнение к условию можно добавить небольшой оператор инициализации.

if i := a * b; i < c {
   val += i
}

Else If и else можно указать так же, как и в любом другом языке.

if a < b {
   return 1
} else if a > b {
   return -1
} else {
   return 0
}

Switch в Go снова похож на другие языки.

switch a {
   case 1: return "a"
   default: return ""
}

Еще одна дополнительная функция, которую Go предоставляет в Switch, — это то, что вы можете добавить условный переключатель.

switch {
   case a>b:return 1
   case b>a:return -1
   default: 0
}

Циклы. В Go есть только один тип цикла, for. Как и в случае с условиями, скобки () можно пропускать в циклах, но фигурные скобки {} являются обязательными. Можно определить базовый цикл for с инструкцией init, условием выполнения и командой post.

for i := 0; i < 10; i++ {
   val += i
}

Оператор Init и команда Post являются необязательными и могут быть опущены. Точку с запятой можно удалить, чтобы сделать его таким же, как цикл while.

for i < 10 {
   val += i
   i++
}

Бесконечный цикл можно запустить, просто пропустив условие выполнения.

for {
   val += i
}

Полный код этого руководства доступен через GitHub Repo.

Надеюсь, вы сочтете это полезным. Если у вас есть предложения, оставьте комментарий.

В Следующей статье мы обсудим, как интегрировать MySQL в Go.

Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: