Skip to content

Latest commit

 

History

History
308 lines (221 loc) · 18.5 KB

go_lang_info.md

File metadata and controls

308 lines (221 loc) · 18.5 KB

The Go Programming Language: Информация

Go — это компилируемый язык программирвания с открытым исходным кодом.

Особенностями языка можно назвать:

  • ООП в классическом виде отсутствует. Инкапсуляция обеспечивается модульной системой языка. Полиморфизм - использованием interface;
  • Отсутствуют исключения. Разработчики языка считают, что ошибки, если они могут возникнуть, должны обрабатываться на месте;
  • Строгий компилятор. Объявление неиспользуемого модуля или переменной считается ошибкой;
  • Очень быстрая компиляция.

Содержание:

Изучение Go

Начинаем с официальных ресурсов: сначала 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»

Инструменты

  • Go vendor tool

    @dymio: [1+] «Тулза, которая позволяет хранить пакеты для приложения не в общей директории $GOPATH/src, а в директории vendor внутри проекта и вести файл vendor.json в котором перечислены все зависимости. Это очень важно и для того, чтобы зависимости проектов не мешали друг другу, и для командной работы — обновить зависимости добавленные коллегой можно одной командой. А то, что этот инструмент использует стандартную для языка директорию vendor и не мешает использовать привычный go run делает его must have для любого приложения на Go, по моему мнению.»

  • Gin, a HTTP web framework

    @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.

  • The Go Wiki

  • Google-группа golang-nuts — a general discussion list for the Go Programming Language (практически все разработчики языка и компилятора там присутствуют и отвечают на вопросы)

  • Google-группа анонсов выпусков

  • Google-группа Golang Russian — русскоязычная группа в которой Dmitry Vyukov (один из русскоговорящих разработчиков компилятора отвечающий за разработку планировщика и GC) является активным участником

  • Awesome Go — a curated list of awesome Go frameworks, libraries and software

  • Go News twitter

  • 4gophers — по-русски статьи, новости, подборка видео, Slack-сообщество и пр.

Материалы