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