Проверь себя в Go

от автора

Golang (Go), известный чуть менее 15 лет, входит в пятерку популярных языков на Stack Overflow. Порог входа относительно невысок, при этом язык хорошо показывает себя при реализации высоконагруженных проектов, хотя и имеет свои подводные камни. 

О работе с Go мы уже рассказывали ранее. Теперь же приготовили тест для начинающих, желающих проверить силы, взглянуть на Go новым взглядом или просто развлечься и узнать немного любопытных фактов. В конце статьи вас ждет инструкция по установке и запуску сервера.

Источник: https://github.com/ashleymcnamara/gophers
Источник: https://github.com/ashleymcnamara/gophers

Дисклеймер: гоферы рекомендуют – для того чтобы получить больше удовольствия от теста, избегайте подсказок;)

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

  • Вопрос 1. Когда появился GO?

Ответы:

1) 1989

1989? Нет, язык гораздо моложе, он впервые был показан в ноябре 2009 года – тогда как С++, например, известен с 1983 года

2) 1999

1999? Нет, язык гораздо моложе, он впервые был показан в ноябре 2009 года – тогда как С++, например, известен с 1983 года

3) 2009

2009? Верно. Это, пожалуй, первый язык, созданный в эпоху web и многопоточности, что нашло отражение в дизайне языка и его стандартных библиотек

4) 2014

2014? Go, конечно, моложе языков-“мастодонтов” со стажем более 30 лет, но не настолько. Язык впервые показан в ноябре 2009 года

  • Вопрос 2. Сколько ключевых слов в языке?

Ответы:

1) 25

25? Верно, среди наиболее популярных серверных языков Go имеет меньше всего ключевых слов, что упрощает процесс обучения разработчиков

2) 33

33? Нет, в Go всего 25 ключевых слов, меньше, чем у других популярных серверных языков

3) 50

50? Нет, в Go всего 25 ключевых слов, меньше, чем у других популярных серверных языков

4) 79

79? Нет, в Go всего 25 ключевых слов, меньше, чем у других популярных серверных языков

  • Вопрос 3. Сколько грамматических правил в языке?  

Ответы:

1) 58

58? Верно, количество грамматических правил в Go меньше, чем во многих популярных языках, что обеспечивает относительную легкость его освоения

2) 83

83? Нет, в Go менее 60 грамматических правил, что обеспечивает относительную легкость его освоения, по сравнению с другими популярными языками

3) 216

216? Нет, в Go менее 60 грамматических правил, что обеспечивает относительную легкость его освоения, по сравнению с другими популярными языками

4) 314

314? Нет, в Go менее 60 грамматических правил, что обеспечивает относительную легкость его освоения, по сравнению с другими популярными языками

Команда Google начала разработку языка Go для своих нужд в 2007 году. В отличие от более старых языков, Go формировался в то время, когда веб-технологии и многопоточные вычисления стали обыденностью. 

За счет простого синтаксиса и наличия синтаксических чекеров Go, как правило, обеспечивает стилистически однообразный код, что помогает командам упростить погружение новых разработчиков в проекты. 

В стандартных библиотеках, в свою очередь, нет скрытых неочевидных циклов, поэтому написанные программы имеют прозрачную вычислительную сложность. 

Часть 2. Насколько Go быстрый

  • Вопрос 4. Перед вами листинг простой программы, которая печатает результаты в несколько потоков. Какое максимальное количество потоков может быть запущено при выполнении этой программы? 

import (    "fmt"    "time" )   func main() {    for i := 1; i <= 3; i++ {        go worker(i)    }      time.Sleep(1 * time.Second) }   func worker(id int) {    fmt.Println(id) }

// да-да, time.Sleep() — это плохо, но это самый простой рабочий пример 🙂

// даже не самый мощный ноутбук сможет запустить 20-30 миллионов простых горутин 

Ответы:

1) 2

Нет. 3 воркера запустятся в цикле, и функция main также запустится в отдельном потоке.

2) 3

Близко, но стоит учесть, что и сама функция main также запустится в отдельном потоке.

3) 4

Совершенно верно, 3 воркера запустятся в цикле, и функция main также запустится в отдельном потоке.

4) 10

3 воркера запустятся в цикле, и функция main также запустится в отдельном потоке. Верный ответ — 4.

Немного о Go

Golang — компилируемый язык, и многих интересует вопрос, насколько удобно с этим работать?

Источник: https://xkcd.com/303/
Источник: https://xkcd.com/303/

В Golang компилятор работает быстро, и даже тяжелый проект соберется за доли секунды. И неважно, разрабатываете вы под Linux, MacOS или Windows. Все, что нужно — написать в терминале go build и все.

Насколько Go быстрый?

Представим, что мы написали небольшой веб-сервер. Он принимает простой запрос и отдает веб-страницу с «Hello, world». Что будет, если по какой-то причине на этот веб-сервер придет одновременно 100000 запросов? Веб-сервер начнет обрабатывать запросы в порядке поступления, и это займет какое-то время. Что если бы ваша программа могла обрабатывать такие запросы параллельно? Многопоточность в Golang реализуется с помощью специальных функций — горутин, и сделать свое приложение многопоточным очень просто. 

Допустим, у вас есть сложная функция, которая печатает текст:

func Print( ) {    fmt.Println("Hello, World!") }

и кто-нибудь вызывает ее, желая распечатать текст:

func Worker() {    Print() }

чтобы запустить функцию Print( ) в отдельном потоке, достаточно вызвать ее с ключевым словом go

func Worker() {    go Print() }

И все, у вас многопоточное приложение!

Часть 3. Насколько Go компактный

  • Вопрос 5. Сколько строк кода нужно, чтобы написать http “hello-world” — сервер, которое на 80-й порт отвечает http-страницей “hello-world”?

Ответы:

1) 8

8? Верный ответ — 10. Если пренебречь читаемостью кода, можно уместить всё даже в 7 строк, но стиль go — это читаемость кода в первую очередь.

2) 10

Верно, всего лишь 10 строк кода, и на localhost:80 вас встречает “hello world”

3) 15

15? Go за лаконичность, верный ответ — 10 🙂

4) 21

21? Go за лаконичность, верный ответ — 10 🙂

Стоит отметить, что Google не рекомендует использовать дефолтный веб-сервер, и в сообществе уже есть более удачные реализации, поэтому сервер был выбран исключительно для удобства примера. Посмотреть список различных интересных и полезных реализаций можно тут https://github.com/avelino/awesome-go 

  • Вопрос 6. Что надо сделать, чтобы код из предыдущего вопроса заработал?

Ответы:

1) Скомпилировать и запустить

Верно, go создавался когда web стал повседневностью, поэтому http сервер уже есть в стандартной библиотеке  

2) Выкачать зависимости импорта, скомпилировать и запустить 

Нет, никаких дополнительных зависимостей выкачивать не нужно,  go создавался когда web стал повседневностью, поэтому http сервер уже есть в стандартной библиотеке 

3) Скомпилировать программу, установить http-cервер и запустить

Нет, никаких дополнительных зависимостей выкачивать не нужно,  go создавался когда web стал повседневностью, поэтому http сервер уже есть в стандартной библиотеке 

4) Выкачать зависимости импорта, скомпилировать программу, установить http-cервер и запустить

Нет, никаких дополнительных зависимостей выкачивать не нужно,  go создавался когда web стал повседневностью, поэтому http сервер уже есть в стандартной библиотеке

  • Вопрос 7. Сколько времени нужно, чтобы запустить свой первый http-сервер на Go?

Ответы:

1) 3 минуты

Верно, 3 минут хватит для того, чтобы набрать 10 строк кода и запустить “Hello world” (без учета установки Go)

2) 5 минут

Нет, 3 минут хватит с избытком на то, чтобы набрать 10 строк кода и запустить сервер. Не учитываем время на скачивание и установку.

3) 11 минут

Нет, 3 минут хватит с избытком на то, чтобы набрать 10 строк кода и запустить сервер. Не учитываем время на скачивание и установку.

4) 20 минут

Нет, 3 минут хватит с избытком на то, чтобы набрать 10 строк кода и запустить сервер. Не учитываем время на скачивание и установку.

Заключение

В приведенных примерах мы сравнили ожидания и реальность относительно работы с Go — надеемся, что вам было интересно проверить себя или познакомиться с языком впервые. В прошлой статье мы уже рассказывали о том, что в числе преимуществ Go отмечают относительную синтаксическую легкость, удобство и скорость работы, разнообразие инструментов в комьюнити. А что вы думаете об этом языке?

В заключение хотим поделиться инструкцией о том, как за несколько минут установить Go, а также написать и запустить код http-сервера. 

Спасибо за внимание! 

Ждем на наших мероприятиях и приглашаем подписаться на нас ВКонтакте или в Telegram, чтобы быть в курсе новых событий.

Инструкция по установке и запуску сервера

Если вы используете UBUNTU, откройте терминал

sudo apt update

sudo apt upgrade

sudo apt install golang

На этом установка завершена. Для просмотра версии выполните:

go version

Если на данном шаге go version не выдает версию языка, найти альтернативный способ установки можно на сайте golang.org.

nano server.go 

Открытие окна редактирования файла server.go. Наберите код:

package main import     "fmt" import "net/http" func handler(w http.ResponseWriter, r *http.Request) {   fmt.Fprintln(w, "Hello world!!!") } func main() {   http.HandleFunc("/", handler)   http.ListenAndServe(":80", nil) }

Нажмите CRTL-O, чтобы сохранить файл

Нажмите CTRL-X, чтобы выйти из редактора текста [Если у вас нет редактора nano, установите его, или используйте свой редактор файлов]

go run server.go 

Сервер запущен, наберите в браузере localhost:80

Вы должны увидеть надпись Hello world!!!

Вернитесь в терминал, нажмите CTRL-C, чтобы остановить сервер, 

снова откройте файл для редактирования:

nano server.go

Измените код:

package main import     "fmt" import "net/http"  var counter int  func handler(w http.ResponseWriter, r *http.Request) {   counter++   fmt.Fprintln(w, "Hello world!!!")   fmt.Fprintf(w,"You have visit this page %d times", counter) }  func main() {   http.HandleFunc("/", handler)   http.ListenAndServe(":80", nil) }

Нажмите CRTL-O, чтобы сохранить файл

Нажмите CTRL-X, чтобы выйти из редактора текста [Если у вас нет редактора nano, установите его или используйте свой редактор файлов]

go run server.go 

сервер запущен, наберите в браузере localhost:80

В результате вы должны увидеть надпись Hello world!!! и счетчик, который покажет, сколько раз вы посетили эту страницу.


ссылка на оригинал статьи https://habr.com/ru/articles/578208/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *