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

В этой статье мы обсудим, как писать код на 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.

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.

Источник: ledsshop.ru

Стиль жизни - Здоровье!