Go — это компилируемый язык программирвания с открытым исходным кодом.
Особенностями языка можно назвать:
- ООП в классическом виде отсутствует. Инкапсуляция обеспечивается модульной системой языка. Полиморфизм - использованием interface;
- Отсутствуют исключения. Разработчики языка считают, что ошибки, если они могут возникнуть, должны обрабатываться на месте;
- Строгий компилятор. Объявление неиспользуемого модуля или переменной считается ошибкой;
- Очень быстрая компиляция.
Содержание:
Начинаем с официальных ресурсов: сначала A Tour of Go и How to Write Go Code.
После хорошо заходит серия коротких статей Getting Started on Heroku with Go после которой получаешь представление о реальном веб-приложении на Go.
Рекомендую закрепить знания и написать простое веб-приложение на Go, например:
First task: Build a data model for the diver using PostgreSQL.
Second task: Build a simple service that provides the following API:
* (POST) /import : Imports the diver's data into the datastore using
the data model implemented before.
* (GET) /diver/:id : Gets a diver's info (in a json format) by his id.
divers data:
[{"id":5,"name":"Albert Einstein","certification_card":"MINA28672"},
{"id":1352,"name":"Isaac Newton","certification_card":"LOOS28463"},
{"id":2,"name":"Galileo Galilei","certification_card":"CSUE39267"},
{"id":7,"name":"Charles Darwin","certification_card":"LEER2735"},
{"id":9,"name":"Marie Curie","certification_card":"MOON99245"},
{"id":8,"name":"Stephen Hawking","certification_card":"SNEWP62293"}]
Third task: Upload the metrics web app to a cloud provider, such as
Heroku/DigitalOcean/aws/google appengine.
Теперь следует вернуться к официальной документации, пройтись по The Go Programming Language Specification, внимательно изучить Effective Go и FAQ. В разделе "Documents" ещё уйма материалов в Wiki и в блоге, но их можно оставить на потом.
Есть бесплатная онлайн-книга для начинающих An Introduction to Programming in Go by Caleb Doxsey (2012) и её, по мнению некоторых людей, неплохой перевод Введение в программирование на Go. @dymio: «Я не читал, ничего сказать про них не могу».
Также рекомендуют книгу The Go Programming Language авторства Alan A. A. Donovan и Brian W. Kernighan. Есть издание Oct 26, 2015, так что довольно свежая книга. @dymio: «И эту книгу не читал».
-
golang.org/pkg — справочник по пакетам, включающий стандартную библиотеку
@dymio: «Тот справочник, к которому будешь обращаться чаще всего»
-
Effective Go — как справочник по языку
@dymio: «Формальная спецификация языка слишком многословна и годится для уточнения специфических моментов, а вот в Effective Go очень удобно подсматривать забытые конструкции.»
-
Go by Example — a hands-on introduction to Go using annotated example programs
-
Go database/sql tutorial — мини-курс по работе с базой данных
@dymio: «Понять как сделать простые действия с базой данных в Go бывает непросто после того, как Rails нас избаловал. Этот туториал сэкономил мне время на поиск простых решений, которые оказалось куда сложнее находить в pkg/database/sql»
-
@dymio: [1+] «Тулза, которая позволяет хранить пакеты для приложения не в общей директории
$GOPATH/src
, а в директорииvendor
внутри проекта и вести файлvendor.json
в котором перечислены все зависимости. Это очень важно и для того, чтобы зависимости проектов не мешали друг другу, и для командной работы — обновить зависимости добавленные коллегой можно одной командой. А то, что этот инструмент использует стандартную для языка директориюvendor
и не мешает использовать привычныйgo run
делает его must have для любого приложения на Go, по моему мнению.» -
@dymio: [1+] «Простой и интуитивный фреймворк с хорошей документацией. Выбрал его по рекомендации туториала на Heroku и не пожалел — проблем с ним вообще не возникло.»
-
reform — a better ORM for Go, based on non-empty interfaces and code generation
@dymio: «Рекомендовано в 103 выпуске GolangShow, как один из самых распространённых ORM для Go. В свою очередь GORM они не рекомендовали. Да и Олег Леонтьев, который посоветовал эту библиотеку потом сказал, что как только добираешься до более сложных конструкций, вроде необычного запроса данных через has many связь, становится очень непросто.»
-
sqlx — general purpose ext. to database/sql
@dymio: «Рекомендовано в 103 выпуске GolangShow как лучший инструмент работы с БД, когда приходится работать уже с готовой, созданной кем-то другим БД. Когда проектируешь сам, лучше использовать вышеупомянутый reform.»
-
GoHeft — simple utility for listing sizes of all used static libraries compiled into golang binary.
-
Dropbox Errors — manipulate errors and provide stack trace information
@dymio: «Рекомендовано в 103 выпуске GolangShow.»
-
spew — a deep pretty printer for Go data structures to aid in debugging
@dymio: «Рекомендовано в 103 выпуске GolangShow как хороший инструмент, когда недостаточно
fmt.Printf("%v", i)
.» -
Logrus — a structured logger for Go (golang), compatible with the standard lib logger
@dymio: «Рекомендовано в 103 выпуске GolangShow как чуть ли не стандарт логирования. Хотя некоторые считают, что стандартного logger'а достаточно.»
-
structlog — structured logger for Go
@dymio: «Рекомендовано в 103 выпуске GolangShow, как хороший аналог вышеупомянутого Logrus'а. По словам ведущего, он попроще, но вывод больше нравится.»
-
The Go Documentation page — official site with a lot of really usefull links.
-
Google-группа golang-nuts — a general discussion list for the Go Programming Language (практически все разработчики языка и компилятора там присутствуют и отвечают на вопросы)
-
Google-группа Golang Russian — русскоязычная группа в которой Dmitry Vyukov (один из русскоговорящих разработчиков компилятора отвечающий за разработку планировщика и GC) является активным участником
-
Awesome Go — a curated list of awesome Go frameworks, libraries and software
-
Go News twitter
-
4gophers — по-русски статьи, новости, подборка видео, Slack-сообщество и пр.
-
Go без глобальных переменных — статья divan0 от 16 июня 2017
-
Миллион WebSocket и Go — статья gobwas от 28 июня 2017
-
Go and a not tiny amount of memory — article by Phil Pearl от 17 мая 2017. Была рекомендована Andy One (andy_one).
-
Сервисы на Go в Badoo: как мы их пишем и поддерживаем — статья lu4e3ar от 16 мая 2017
-
Лекции Техносферы: Программирование на Go — курс видео-лекций на Хабре от 10 мая 2017
-
Golang: Undertanding Basic of Concurrence Programming in the easiest way — article by Yusuf at 2017.04.23
@dymio: «Elena Grahovac рекомендовала эту статью в 102 выпуске GolangShow как статью с очень хорошими и последовательными примерами, которые действительно помогают понять то, как работает конкурентность в Go.»
-
Go дайджест. 30 марта — 13 апреля 2017 — статья Игоря Фокусова (fokusov) от 13 апреля 2017
-
Go дайджест. 15 — 30 марта 2017 — статья Игоря Фокусова (fokusov) от 30 марта 2017
-
Go дайджест. 1 — 14 марта 2017 — статья Игоря Фокусова (fokusov) от 15 марта 2017
-
Profiling and optimizing Go web applications — article by Artem Krylysov от 13 марта 2017. Есть перевод Павла Мурзакова (lu4e3ar)
-
Style guideline for Go packages — article by Jaana B. Dogan (rakyll) от 14 января 2017. Была рекомендована Алексеем Колосовым.
-
Calling Go Functions from Other Languages — article by Vladimir Vivien от 27 февраля 2017. Есть перевод AloneCoder.
@dymio: [1+]
-
Golang tutorial series — tutorial by Naveen Ramanathan начатый 2 февраля 2017
-
Building Go Web Applications and Microservices Using Gin and Test-driven Development of Go Web Applications with Gin — articles by Kulshekhar Kabra от 28 сентября 2016
@dymio: [1] «Хорошие статьи чтобы шаг за шагом сделать полноценное веб-приложение на Go со всеми плюшками, вроде тестов. Но уж очень многословные и не всегда понятные. Я попробовал изучить только вторую статью, чтобы добавить тесты в своё приложение, но не разобрался, так что читать нужно обе статьи полностью.»
-
Как я 8 месяцев переписывал свою криптовалюту с PHP на Go. Часть 1, Как я 8 месяцев переписывал свою криптовалюту с PHP на Go. Часть 2, Как я 8 месяцев переписывал Dcoin на Go… про Катю, в общем, Катя, Go, Dcoin и Android, Dcoin на IOS… и Катя. Финал — серия статей Олега Стреленко (c-darwin) от 10 декабря 2015 – 15 апреля 2016.
@dymio: «Хер знает что он там про техническую часть писал — я про Катю читал :)»
-
Визуализация concurrency в Go с WebGL — статья divan0 (Ваня) от 31 января 2016,
@dymio: [1] «Статья неплохо помогает пониманию того, как работают goroutines и даёт много примеров кода с использованием их и каналов. А ещё даёт визуальный пример разницы между concurrency и параллелизмом.»
-
Why Go is a poorly designed language — article by Ian Byrd от 28 октября 2015. Есть перевод от Ильи Ковалевского.
@dymio: [1+] «Стоит забить на излишнюю эмоциональность статьи и прочитать про недостатки (или особенности, кому как приятнее) языка Go отлично описанные в этой статье. Это поможет не наступить на грабли при работе.»
-
Эволюция Go — перевод конспекта доклада Роберта Грисмера Владимиром Масловым от 11 июля 2015
-
С чего начать новичку в Go — статья M0sTH8 от 23 октября 2015. @dymio: «Взял с неё много неплохих ссылок, но они уже в этом документе, так что нет смысла читать, ИМХО»
-
Go-дайджест: июнь 2014 — статья Владимира Маслова (HotWaterMusic) от 4 июля 2014
-
7 common mistakes in Go and when to avoid them — talk by Steve Francia от 10 июня 2015
-
Is Go An Object Oriented Language? — article by Steve Francia от 9 июня 2014. Есть перевод Максима Куприянова (Xlab).
@dymio: [1] «Статья хороша тем, что она помогает понять язык Go лучше тем, кто работал до этого с ООП языками. В примерах показано, как лучше написать аналог класса в Go, полиморфизм и прочее.»
-
Why Go Is Not Good — article by Will Yager от июня 2014
-
"On Go" — article by David Given от 17 ноября 2009