Что такое Go (Golang, иногда пщ)?
Go — язык программирования разработанный в Гугле Робертом Грисмайером, Робом Пайком и Кеном Томпсоном. Язык программирования Go статически-типизированный язык с синтаксисом похожим на C. Его фичами являются:
- сборщик мусора
Не надо самому следить за тем, чтобы удалять из памяти то, что уже пригодится - типобезопасность
Это значит, что во время компиляции у нас не будет ошибок, связанных с согласованием типов, к примеру, мы не увидим ошибок вроде "Uncaught TypeError: ... is not a function at..." (привет JavaScript!) - возможности динамической типизации
Этим лучше не пользоваться, но если очень хочется, то можно - множество встроенных высокоуровневых типов данных (вроде словарей, списков, буферов)
- очень богатая стандартная библиотека
К примеру, не нужны никакие библиотеки/фреймворки, чтобы написать высокопроизводительный веб-сервис, всё уже есть - все, кто хоть раз кодил на нём, могут подтвердить, что у него классный синтаксис — выразительный, лаконичный, чистый и множество других эпитетов (это и правда так, но ничего идеального нет). Многие приходят на него с интерпретируемых языков вроде питона или php, отмечают, что остаётся ощущение программирования на интерпретируемом языке, но в то же время код типизированный и производительный.
- он конкурентный
Это мы ещё обсудим как-нибудь, если вкратце, то прямо в синтаксис языка очень удобно встроена возможность выполнять несколько кусков кода одновременно. - он быстро компилируется в машинный код
Правда, очень быстро. Если взять проекты аналогичного размера на плюсах и на го, го компилируется мгновенно, в то время как во время компиляции плюсового проекта можно было бы сходить заварит чаёчка. И да в машинный код. Ты берёшь и компилируешь, в один бинарник, а на целевой машине просто запускаешь. Никаких интерпретаторов, виртуальных машин, запускаторов и подобной чуши. Один работающий бинарник. - кросс-компиляция
Можно под виндой собрать бинарник под линь и наоборот.
Если всё это тебе нравится, идём дальше.
Установка окружения
Идём на страницу загрузки оф. сайта, скачиваем версию под твою ось, ставим и
Обычно никаких проблем не возникает, поэтому не буду останавливаться на установке. Чтобы проверить, что всё установилось нормально, проверим версию go из терминала. На момент написания статьи вывод выглядит так:
> go version
go version go1.14.2 darwin/amd64
Ещё можно написать традиционный hello world:
И запустить его:
> go run helloworld.go
Hello, World!
Пока знакомитесь, ставить go и редакторы необязательно, все примеры можно запустить прямо из браузера на The Go Playground.
Редактор
В принципе, можно использовать любой, который нравится. Кто-то использует vim, кто-то Sublime Text, кто-то ещё что-то. Но обычно выбор стоит между двумя самыми популярными редакторами:
- Goland от JetBrains. Выше всяких похвал, но платный. Можно попробовать месяц бесплатно, потом придётся платить. Студенты могут получить бесплатную лицензию на время учёбы.
- VisualStudio Code с плагином для Go. Бесплатно, многим нравится, но по удобству отстаёт от первого пункта.
Продолжаем знакомство. В helloworld уже были комментарии, но закрепим.
Пакеты
Каждая программа на Go состоит из пакетов. Программы начинают свою работу с пакета main. Наш helloworld использует пакет fmt, для того, чтобы распечатать что-то в терминал.
Импорты
Есть два варианта импортировать пакеты. Если нам нужен только один пакет, то мы используем такой:
import "fmt"
Таким образом можно импортировать и несколько пакетов:
import "fmt"
import "math"
Но выглядит многословным, поэтому сокращают и пишут так:
import (
"fmt"
"math"
)
Функции
Мы можем создать функцию таким образом:
func имяФункции(аргумент1 типПараметра, аргумент2 типПараметра) типВозвращаемогоЗначения {
// тело функции
// и возврат
return результат
}
(кстати, я раньше не пробовал такое, но сейчас выяснил, что выше абсолютно валидный код, полностью рабочий пример по ссылке)
Функция может принимать от нуля до любого количества аргументов. В примере ниже, функция add принимает два аргумента типа int (целое число). Стоит обратить внимание, что тип переменной записывается после имени переменной.
Запустим, чтобы увидеть результат:
> go run add/add.go
4
Переменные
Определение переменной означает "сказать компилятору' где и какого размера создать хранилище для переменной. В одной строке можно определить несколько переменных одного типа.
var имяПеременной1, имяПеременной2 типПеременной
Ключевое слово var позволяет определять переменные, как func определяет функции. Как и с аргументами функций, тип переменной пишется после её имени. var можно использовать как на уровне пакета, так и в функциях:
Массивы
Используются в Go весьма редко, но знание о них важно для следующего раздела. Массив — структура данных, которая может хранить некоторое заранее заданное количество значений определённого типа.Чтобы создать массив, необходимо задать его размер и тип хранимых переменных:
var имяМассива [размерМассива]типПеременных
Для примера, создадим массив c именем balance из десяти элементов типа float64:
var balance [10]float64
Можно сразу задать значения массива, тогда можно не писать его размер, а вместо этого использовать "...":
var balance := [...]{1, 2, 3, 4}
И к примеру:
> go run array/array.go
Привет , Мир
[Привет Мир]
[2 3 5 7 11]
Слайсы
В go слайсы представляют собой абстракцию над массивами. Массивы позволяют хранить несколько элементов, но необходимо заранее знать количество элементов, которые необходимо хранить. Слайсы решают эту проблему + для них реализовано много полезных функций.
Слайсы определяются похожим с массивами образом, но нам не нужно писать число элементов.
var numbers []int // создаёт слайс нулевой длинны
или
numbers := []int{1, 2, 3} // слайс из трёх заранее заданных чисел
или
numbers := make([]int, 3) // слайс из трёх нулей
Я уверен, что многие уже знают о слайсах, но под другим именем. В некоторых языках программирования их называют динамическими массивами, где списками, где-то векторами. Главной фишкой слайсов является слайсинг (нарезка) массивов или других слайсов. К примеру:
Циклы For
Ключевое слово for позволяет выполнить определённый кусок кода несколько раз. В отличие от других языков программирования, в go есть только одно ключевое слово для циклов, но которое покрывает все возможные случаи его применения.
Структуры
Структуры — тип данных, который позволяет определять программистам свои типы данных и группировать внутри разные значения.
Чтобы определить структуру нужно использовать ключевые слова type и struct. Ключевое слово struct создаёт новый тип данных, с один или несколькими полями. type связывает создаваемую структуру с именем нового типа.
Синтаксис:
type имяСтруктуры struct {
поле1 типПоля1
поле2 типПоля2
}
Как только структура определена, можно создавать переменные с типом вновь созданной структуры.
имяПеременной := имяСтруктуры{
поле1: значениеПоля1,
поле2: значениеПоля2,
}
И более подробный пример:
Продолжение следует...
🚀Если узнал из статьи что-то полезное, ставь лайк и подписывайся на Дзене или группе ВК 😏
Если код не отображается — временно отключи блокировщик рекламы, это всё Дзен.
Все новые статьи можно найти на сайте - https://wcademy.ru/