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