Найти в Дзене
wcademy

Основы языка Go. Часть 1

Что такое Go (Golang, иногда пщ)? Go — язык программирования разработанный в Гугле Робертом Грисмайером, Робом Пайком и Кеном Томпсоном. Язык программирования Go статически-типизированный язык с синтаксисом похожим на C. Его фичами являются: Если всё это тебе нравится, идём дальше. Установка окружения Идём на страницу загрузки оф. сайта, скачиваем версию под твою ось, ставим и Обычно никаких проблем не возникает, поэтому не буду останавливаться на установке. Чтобы проверить, что всё установилось нормально, проверим версию 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, кто-то ещё что-то. Но обычно
Оглавление

Что такое Go (Golang, иногда пщ)?

Go — язык программирования разработанный в Гугле Робертом Грисмайером, Робом Пайком и Кеном Томпсоном. Язык программирования Go статически-типизированный язык с синтаксисом похожим на C. Его фичами являются:

  • сборщик мусора
    Не надо самому следить за тем, чтобы удалять из памяти то, что уже пригодится
  • типобезопасность
    Это значит, что во время компиляции у нас не будет ошибок, связанных с согласованием типов, к примеру, мы не увидим ошибок вроде "Uncaught TypeError: ... is not a function at..." (привет JavaScript!)
  • возможности динамической типизации
    Этим лучше не пользоваться, но если очень хочется, то можно
  • множество встроенных высокоуровневых типов данных (вроде словарей, списков, буферов)
  • очень богатая стандартная библиотека
    К примеру, не нужны никакие библиотеки/фреймворки, чтобы написать высокопроизводительный веб-сервис, всё уже есть
  • все, кто хоть раз кодил на нём, могут подтвердить, что у него классный синтаксис — выразительный, лаконичный, чистый и множество других эпитетов (это и правда так, но ничего идеального нет). Многие приходят на него с интерпретируемых языков вроде питона или php, отмечают, что остаётся ощущение программирования на интерпретируемом языке, но в то же время код типизированный и производительный.
  • он конкурентный
    Это мы ещё обсудим как-нибудь, если вкратце, то прямо в синтаксис языка очень удобно встроена возможность выполнять несколько кусков кода одновременно.
  • он быстро компилируется в машинный код
    Правда, очень быстро. Если взять проекты аналогичного размера на плюсах и на го, го компилируется мгновенно, в то время как во время компиляции плюсового проекта можно было бы сходить заварит чаёчка. И да в машинный код. Ты берёшь и компилируешь, в один бинарник, а на целевой машине просто запускаешь. Никаких интерпретаторов, виртуальных машин, запускаторов и подобной чуши. Один работающий бинарник.
  • кросс-компиляция
    Можно под виндой собрать бинарник под линь и наоборот.

Если всё это тебе нравится, идём дальше.

Установка окружения

Идём на страницу загрузки оф. сайта, скачиваем версию под твою ось, ставим и

-2

Обычно никаких проблем не возникает, поэтому не буду останавливаться на установке. Чтобы проверить, что всё установилось нормально, проверим версию 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/