Установка Go
Заходим на официальный сайт Go.
Нажимаем на Download Go.
Выбираем версию для своей операционной системы и скачиваем.
Пользователям Windows нужно запустить установщик. Если вы используете Linux, придется распаковать скачанный архив в /usr/local/go и экспортировать путь /usr/local/go/bin в переменную среды $PATH . Получиться должна примерно следующая структура папок:
Чтоб убедиться в успешной установке введите команду go version в консоли или терминале:
Установка редактора кода
Go поддерживается в различных редакторах кода (IDE), к примеру:
- Goland
- Visual Studio Code
- vim
Полный список IDE доступен по сылке: https://github.com/golang/go/wiki/IDEsAndTextEditorPlugins
Создание проекта
Создадим директорию helloworld. Перейдем в нее и выполним команду:
go mod init helloworld
Должен появиться файл с названием go.mod.
go.mod в корне. Этот файл определяет путь модуля и набор импортируемых модулей.Далее создадим файл main.go и запишем в него следующий код:
package main
func main() {
println("Hello World")
}
Компиляция и запуск программы
Чтобы запустить код, откройте консоль или терминал. Далее перейдите в каталог, где расположен файл main.go и выполните команду:
go run main.go
Результат работы программы будет следующим:
Вы написали первую программу на Go, поздравляем!
Давайте разберем, что здесь происходит:
- Функция
main– входная точка программы. С нее основная программа начинается и в ней же завершается. println– функция, выводящая текст на экран консоли. Для вызова используется следующий синтаксис:название функции + открывающая круглая скобка + аргументы функции + закрывающая круглая скобка + операторные скобки {}.- По достижении последней фигурной скобки функции
mainпрограмма завершается.
Код, листинги которого будут приведены ниже, должны располагаться внутри фигурных (операторных) скобок функции main. В примерах функция main будет опущена для краткости.
Переменные
Переменные в Go характеризуются названием и типом, они должны объявляться до первого использования.
Объявление переменной в Go:
var number int
Мы объявили переменную number с типом int. int – тип переменной, которая хранит целое число.
Базовые типы данных:
- bool
- string
- int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr
- byte // псевдоним для uint8
- rune // псевдоним для int32
- float32 float64
- complex64 complex128
При объявлении переменной устанавливается ее начальное значение. Для int это 0, для float – 0.0, для string – "" (пустая строка), для bool – false.
Если начальное значение переменной известно во время объявления, можно воспользоваться краткой записью:
number := 0
// эквивалентно
var number = 0
Чтобы записать значение в переменную после ее объявления, воспользуйтесь оператором =:
var number, secondNumber int
number = 15
secondNumber = number
println(number) // Вывод: 15
println(secondNumber) // Вывод: 15
Над переменными можно производить операции с помощью операторов. Например, числа можно сравнить, а строки конкатенировать.
Список операторов Go:
Управляющие конструкции
Для управления тем, какие строки кода исполнятся и в каком порядке, существуют специальные конструкции. Давайте перечислим основные:
- Следование
- Условие
- Циклы
Следование
Весь код исполняется последовательно, строка за строкой.
Условие
Для исполнения участка кода в зависимости от условия используется условная конструкция if:
number := 15
secondNumber := 10
if number < secondNumber {
println("первое число меньше второго")
}
Сообщение не будет выведено на экран, так как условие ложно. На месте условия может использоваться все, результатом чего будет значение типа bool.
Чтобы определить код, который выполнится при невыполнении ни одного условия можно добавить else:
if number < secondNumber {
println("первое число меньше второго")
} else if number > secondNumber {
println("второе число меньше первого")
} else {
println("числа равны")
}
Дополнительно к конструкции управления if имеется конструкция switch, работающая подобным образом:
switch 200 {
case 100:
println("число равно 100")
case 200:
println("число равно 200") // будет выведено это
}
switch получает значение 200 и ищет case, в котором значения совпадают и выполняет только определенный участок кода.
switch также может использоваться как замена if. Перепишем пример с if:
switch {
case number < secondNumber:
println("первое число меньше второго")
case number > secondNumber:
println("второе число меньше первого")
default:
println("числа равны")
}
Роль else здесь играет слово default. Оно также будет выполнено при невыполнении ни одного из условий.
Циклы
Обратите внимание: для повторения участков кода в Go используется только цикл for, который может принимать разные формы:
for i := 1; i <= 10; i++ {
println(i)
}
Этот цикл распечатает значения от 1 до 10.
Если нужен цикл без счетчика, нужно опустить первую и третью части цикла for вместе с точкой запятой:
for number < secondNumber {
number = number + 1
}
На каждом повторении цикла будет проверяться заданное условие. Пока условие истинно, цикл будет продолжаться. Как только условие станет ложным, он прервется.
Для бесконечного цикла можно опустить условие:
for {
println("Бесконечный цикл")
}
Чтобы остановить цикл, используется ключевое слово break:
i := 0
for {
println("Бесконечный цикл")
if i == 10 {
break
}
i++
}
При достижении конструкции break цикл будет завершен.
Внутри цикла также можно использовать специально слово continue. Оно отличается от break тем, что не сразу завершает цикл, а лишь пропускает оставшийся код цикла и начинает новое повторение.
Массивы
Объявление массива:
var numbers [3]int
Обращение к элементам массива производится по имени массива и индексу элемента. Элементы массива индексируются с нуля.
Заполнение массива значениями:
numbers[0] = 10
numbers[1] = 11
numbers[2] = 12
Если начальное значение массива известно при объявлении, можно воспользоваться литералом объявления массива:
var numbers [3]int = [3]int{10, 11, 12}
Для избежания лишнего кода воспользуемся кратким объявлением:
numbers := [3]int{10, 11, 12}
Размер массива статичен и не может меняться во время выполнения программы. Для этих целей используются слайсы.
Слайсы
Слайс является более удобной альтернативой массиву. Объявление слайса отличается от объявления массива только отсутствием размера:
numbers := [3]int{10, 11, 12} // массив
numbers := []int{10, 11, 12} // слайс
Слайс может менять размер во время выполнения программы. Для добавления новых элементов в слайс используется встроенная функция append:
numbers = append(numbers, 13) // добавление одного элемента
numbers = append(numbers, 14, 15) // добавление двух элементов
Функции
Для переиспользования часто используемого кода нужны функции.
println для вывода значений на экран.Функция должна быть объявлена вне функции main:
func НазваниеФункции(первыйАргумент int, второйАргумент int) (возвращаемоеЗначение int) {
// тело функции
return 0
}
После ключевого слова func указывается название функции. Далее в круглых скобках аргументы, которые принимает функция. После закрывающей круглой скобки указывается одно или несколько возвращаемых значений функции, а затем следует код функции в операторных скобках.
Функция Sum складывает два числа и возвращает результат:
func Sum(a, b int) int {
return a + b
}
Функция SumAndDivide возвращает как сумму, так и частное чисел:
func SumAndDivide(a, b int) (int, int) {
return a + b, a / b
}
Обе функции доступны в функции main:
func main() {
sum := Sum(1, 2)
println(sum) // 3
sum, division := SumAndDivide(4, 2)
println(sum) // 6
println(division) // 2
}
Пакеты
Писать код большой программы в одном файле неудобно. Тем более переиспользовать этот код нельзя. Поэтому код разбивается на пакеты – наборы файлов с расширением .go и кодом, который можно импортировать и переиспользовать. Стандартная библиотека языка Go содержит много часто используемых и важных пакетов. Например, в пакете strings содержатся функции для работы со строками.
Импорт и использование пакета strings:
package main
import "strings"
func main() {
upper := strings.ToUpper("заглавные буквы")
println(upper) // Output: ЗАГЛАВНЫЕ БУКВЫ
}
Ключевое слово import нужно для импорта используемых пакетов. Чтобы использовать функции из пакета strings, нужно:
- написать название пакета;
- поставить точку;
- вызвать нужную функцию из пакета.
Первое серверное приложение “Hello Web”
В пакете http содержится все необходимое для создания веб-сервера.
package main
import (
"log"
"net/http"
)
func HelloWeb(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello Web!"))
}
func main() {
http.HandleFunc("/", HelloWeb)
err := http.ListenAndServe("localhost:9999", nil)
if err != nil {
log.Println("listen and serve:", err)
}
}
Запустите код. Далее откройте браузер и перейдите по адресу http://localhost:9999/. Вы получите сообщение “Hello Web!”
Функция http.HandleFunc устанавливает функцию HelloWeb, по пути /, а http.ListenAndServe запускает сервер по указанному адресу.
Если вы перейдете по указанному адресу, вызовется функция HelloWeb. Функция принимает два аргумента – сам запрос и переменную, позволяющую ответить на запрос. В строке w.Write([]byte(“Hello Web”)) мы отвечаем на запрос обычной строкой.
Поздравляем, вы написали ваш первый веб-сервер на Go!
Литература
- «Изучаем Go» – Head First, Джек Макгаврен.
- «Язык программирования Go» – Алан А. А. Донован, Брайан У. Керниган.
- «Go на практике» – Батчер Мэтт, Фарина Мэтт.
Онлайн ресурсы
- https://golang.org/ – официальный сайт.
- https://tour.golang.org/welcome/1 – тур по языку Go.
- https://go.dev/ – оффициальный портал об экосистеме языка.
Go в “Библиотеке Программиста”
- телеграм-канал Библиотека Go-разработчика
- подписывайтесь на тег Go, чтобы получать уведомления о новых постах на сайте
Мы пробежались по основам Go: переменные, операторы, управляющие конструкции, функции.
Ценностями языка являются:
- Простота
- Эффективность
- Надежность
- Продуктивность
- Дружелюбность
Go современный, широко используемый и востребуемый язык программирования, который стоит начать изучать прямо сейчас.
Хочу освоить алгоритмы и структуры данных, но сложно разобраться самостоятельно. Что делать?
Алгоритмы и структуры данных действительно непростая тема для самостоятельного изучения: не у кого спросить и что-то уточнить. Поэтому мы запустили курс «Алгоритмы и структуры данных», на котором в формате еженедельных вебинаров вы:
- изучите сленг, на котором говорят все разработчики независимо от языка программирования: язык алгоритмов и структур данных;
- научитесь применять алгоритмы и структуры данных при разработке программ;
- подготовитесь к техническому собеседованию и продвинутой разработке.
Курс подходит как junior, так и middle-разработчикам.
Комментарии