{wcademy}

Введение в Go за пять минут

January 25, 2021

golang 1

Я около пяти лет программирую на го, из них последние три в основном на нём. Со всей ответственностью могу заявить, что это один самых классных языков программирования на текущий момент. А с приходом второй версии он станет ещё лучше. Я предлагаю познакомиться с этим языком от Google всего за 5 минут.

В 2007 году ни один из существующих языков не был достаточно хорош для проблем, с которыми столкнулся Google. Трое из сотрудников, Кен Томпсон, Роб Пайк и Роберт Грисемер зарезервировали переговорку, чтобы обсудить возможные варианты. И чтобы решить проблемы Google, они просто решили создать новый язык. И с их огромным опытом в программировании они могли это сделать. Потому что да, эти ребята не стажёры. Они помогли создать язык C, Unix и даже UTF-8. Мы говорим о настоящих бородатых программистах (хоть и без свитеров).

создатели го

Они хотели трёх вещей: чрезвычайно быструю компиляцию, эффективное исполнение и очень простой в использовании язык. Никто не поспорит, что плюсы (которые С++) во многом хороши, особенно с точки зрения производительности, но слишком сложны в использовании и слишком долго компилируются. Java компилится значительно быстрее, но всё же слишком сложная для использования (энтепрайзность во всей красе). Python прост и лаконичен, но слишком уж нетороплив. У всех языков есть какой-то фатальный недостаток для наших трёх легендарных программистов. И именно для решения всех трёх проблем разом был придуман Go.

В 2009 году язык был публично объявлен, а в 2012 году в интернете появился первый релиз. Go — это компилируемый и сильно типизированный язык программирования. С точки зрения синтаксиса, он крайне похож на C. Обычно компиляция даёт отличную производительность, но тратит время разработчиков.

компилируется

Но не с Go. Компиляция практически мгновенная. Таким образом, мы получаем типизацию и скорость компилируемого языка со скоростью разработки на интерпретируемом языке.

гофер программирует

После компиляции Go генерирует один файл. Этот файл содержит весь код и может быть использован без установки рантаймов или компиляторов, просто запускается. Туда же можно засунуть и статические файлы. Это значительно упрощает развёртывание. А также Go является многопарадигменным языком. Можно писать как в процедурном, так и объектно-ориентированном стиле. Объектно ориентированный подход отличается от мейнстримовых ООП языков, но его более чем хватает для задач любой сложности. У го также есть сборщик мусора, который в очередной раз уменьшает сложность для разработчика. На го также невероятно просто писать многопоточный код благодаря его абстракциям горутин и каналов. Наконец, многие винят го в недостатке синтаксического сахара и некоторых возможностей, но это был осознанный выбор создателей языка. Цель состоит в том, чтобы никто не терялся, когда натыкается на код, который он не знает. Единообразие и простота поставлены во главу угла. Начнём знакомство с го примером из официального руководства. Дальше мы будем его модифицировать, но начнём с самой простой программы.

package main

import (
	"fmt"
)

func main() {
	fmt.Println("Hello world")
}

Да, стандартный Hello World. Каждая программа состоит из пакетов, а выполнение начинается в пакете mail. Другие пакеты Go можно импортировать с помощью “import”. Здесь мы импортируем fmt, который позволит нам распечатать Hello World в основной функции исполнения main (). Довольно просто, не так ли?

package main

import (
	"fmt"
)

func add(x, y int) int {
	return x + y
}

func main() {
	i, j := 1, 2
	fmt.Println(add(i, j))
}

Теперь мы добавляем функцию и, как видите, она строготипизированная. Мы задаем как типа для параметров x и y, так и возвращаемое значение. Затем в основной функции мы создаём две переменные, которые инициализируем напрямую. Затем мы выводим результат первой функции через fmt. Обратите внимание, что если бы я не использовал переменные i и j, компилятор Go сразу начал ругаться.

гошечка ругается

Как я уже говорил, объектно-ориентированный подход может казаться непривычным. Нет никаких классов, но есть структуры и методы, связанные с ними. Интерфейсы реализованы неявно. Привет «утиной типизации» из питона, типу достаточно иметь все методы интерфейса, чтобы соответствовать ему, это сбивает с толку всяких джавистов, рассмотрим подробнее.

package main

import (
	"fmt"
)

type Developer interface {
	Code() string
}

type GoDeveloper struct {
}

func (gd GoDeveloper) Code() string {
	return "go code"
}

func main() {
	var developer Developer
	developer = GoDeveloper{}
	fmt.Println(developer.Code())
}

Наконец, давайте посмотрим, как выглядят горутины.

package main

import (
	"fmt"
	"time"
)

func say(s string) {
	for i := 0; i < 5; i++ {
		time.Sleep(100 * time.Millisecond)
		fmt.Println(s)
	}
}

func main() {
	go say("hello")
	say("world")
}

Концепция лёгких потоков существует и в других языках, но именно в го горутины являются одной из самых крутых фич. Это функции, которые могут быть запущены параллельно с другими функциями. Они похожи на потоки операционной системы, но они значительно более легковесны. Горутины общаются друг с другом по каналам.

Люди часто используют имя Голанг для обозначения Го. Название происходит от официального сайта golang.com. Домен go.com уже был занят диснеевским сайтом. У Google не было выбора, и теперь имя Golang везде. Обратите внимание, что Google поддерживает го, но язык полностью открытый.

гоферы

В любом случае, это не остановило весь мир от использования Голанга. Очевидно, что его активно используют в гугле. Докер полностью написан на Голанге. Он используется в производстве на Amazon, IBM, Netflix, Facebook и даже DigitalOcean. И прошло уже более 10 лет, так что экосистема успела развиться. И теперь используют практически во всех крупных компаниях для самых разных применений.

🚀  Если узнал из статьи что-то полезное, ставь лайк и подписывайся на наш канал в Телеграм или группу ВК. Обсудить статью можно в нашем уютном чатике 😏

© 2019 - 2022, {wcademy}