Для тех, кто пишет на языке Go

    Друзья!


    В продолжении поста «Google выпустила финальную версию языка программирования Go 1» интерес получил логическое продолжение и наше робкое желание было услышано администрацией Хабра и с сегодняшнего дня у языка Go есть собственный блог хаб.

    Пользуясь случаем, не могу не порекомендовать книгу «Learning Go», свежую версию которой можно всегда скачать (PDF, ~1.5Mb) у автора (спасибо, Miek Gieben) или в репозитории (исходники .tex):

    git clone http://www.miek.nl/git/gobook.git

    На данный момент это наиболее полный учебник по языку Go, детально описывающий основы и возможности языка. Книга насчитывает около 120 страниц (A4), содержит примеры кода (с ответами) и, на мой взгляд, представляет нам более дружелюбный способ ознакомиться с языком, нежели чтение документации на официальном сайте.

    Пишите, делитесь опытом, не робейте! Go lang!
    Поделиться публикацией

    Комментарии 55

      +2
      Спасибо за книгу! Есть еще и gotour, где за 70 коротких шагов даются основы языка Go.

      P.S. Для тех, кто будет запускать Go приложения на Google App Engine – _go_app запускает сразу все файлы .go.
        0
        Еще что – по ссылке .tex идет, а для тех, кто не может/не хочет компилировать из него книгу – можете скачать и PDF

        http://www.miek.nl/files/go/
          0
          Александр, спасибо за уточнение. Но ссылка у меня имеется:
          свежую версию которой можно всегда скачать у автора
          а то, что по ссылке PDF сейчас добавлю…
            0
            Точно! Машинально ввел git clone… и уже потом стал искать PDF.

            Буду внимательней читать :)
          +3
          Good news, everyone! :) Может в этот хаб я начну писать не только комментарии.
            0
            Да, пожалуйста! Минимум один благодарный читатель у Вас уже есть :)
              0
              Неправда! Минимум два :)
                0
                Три! И думаю станет еще больше.
                  0
                  А кто-нибудь из благодарных читателей имеет что нить в стадии продакшн на Go?
                    +2
                    Вполне логично предположить, что изучающие Go вряд ли имеют что-либо в продакшене или хотя бы в деве. Однако, вы натолкнули меня на интересную идею — публиковать статьи по Go на примере совместно создаваемого хабрасообществом проекта.
                      0
                      Это было бы великолепно!
                        –1
                        У меня есть вот какая идея: сделать опенсорсный облачный сервер со встроенной rss-читалкой (типа google reader), файловым хранилищем (наподобие dropbox), фотогаллереей, историей сообщений из разных IM, контактами, возможно с интеграцией с соцсетями и прочими бытовыми ништяками. Для безопасности сделать, чтобы на сервере информация хранилась в зашифрованном виде.

                        По-моему такой проект очень нужен сейчас, особенно учитывая, что большинству так или иначе приходится хранить личную информацию в интернете, и мало кто не желает, чтобы кто-то кроме них имел к ней доступ.

                        Есть, конечно, ownClowd, но они пока не так далеко ушли и вполне можно конкурировать и/или даже сотрудничать. Тем более Go идеально подходит для таких целей, а работа легко параллелится между несколькими программистами.

                        Я уже давно хотел сам начать, но боюсь, что не осилю :)
                          +2
                          Вы представляете себе бюджет такого проекта? :) Не столько издержки на разработку, сколько постоянные издержки на инфраструктуру?
                            0
                            Я, наверное, не совсем правильно выразился. Бюджет нулевой. Проект свободный (и как слово, и как пиво). Пользователь сам арендует железо и устанавливает туда наше ПО.

                            Аренда простенького VPS — вполне подъемная цена. Тем более вполне можно хостить это на своем домашнем сервере, на котором вдобавок качаются торренты и прочее… Не говоря уже про то, что если не налягать на файловое хранилище, то можно бесплатно пользоваться серверами Google App Engine или Heroku, не выходя за лимиты.

                            Например Heroku разрешает использовать один процесс, 512мб оперативной памяти и 5Гб базы данных бесплатно. Для одного пользователя более чем достаточно.
                            0
                            Я уже джва года хочу такой сервис.
                              0
                              Первый раз прочитал 'джава'
                                0
                                Я думаю, многие гики хотят ;) И чем больше у нас гаджетов, тем больше мы зависим от облака.
                                  –1
                                  Извините, пожалуйста, на самом деле я вас троллил. Видимо, слишком тонко =(
                              0
                              Go на самом деле может оказаться интересным, особенно с детальными статьями, как вы это умеете делать!
                              0
                              Имея уже что-то в продакшн благодарный читатель должен превратиться в писателя :)
                      +2
                      Ура новому хабу! :)
                      На счет книжек:
                      Я себе прикупил и прочитал книжку "Programming in Go: Creating Applications for the 21st Century", книжка мне в целом понравилась, но она достаточно дорогая. А вот недавно случайно наткнулся на книжку The Way to Go: A Thorough Introduction to the Go Programming Language и не смог пройти мимо — цена PDF варианта — $4! Эту книжку я прочитать еще не успел, все еще читаю и она не сильно то и хуже чем книжка Mark'а (которая стоит $31.49 в PDF) :)
                        0
                        А вот подскажите, в какой из них больше сделан упор использования для веб-приложений?
                        И разобраны ли примеры создания своих пакаджей (если да)?

                        PS: И как они свёрстаны, удобно ли читать? Делов том, что я читаю только с бумаги.
                          +1
                          Как сверстаны на бумаге — я точно не скажу, но PDF аккуратнее у «The Way to Go». На web-приложения в книжке Programming in Go упора вообще никакого нет. Даже отдельной главы нет :) Некоторые примеры, которым нужно UI, используют web-сервер для этого, и все. Про свои пакеты основы даются.
                          «The Way to Go» я еще до этих частей (свои пакеты, веб-приложения) не дочитал, так что сказать ничего не могу.
                          Мне самому больше всего интересно было бы почитать, как лучше организовать структуру крупного Web-проекта, какие блоки выносить в отдельные пакеты, какие оставлять в одном пакете, но разносить по разным файлам и т.п. Но похоже что для этого нужно найти исходный код крупного Web-проекта на Go и изучать его, в вышеприведенных книжках ответа на этот вопрос я не нашел.
                            0
                            Тогда, пожалуй, ограничусь пока книгой голландца, тем более, что pirro стартовал в соседней ветке цикл статей по созданию полноценного веб-приложения.

                            Надеюсь «доброжелатели» в комментариях не отобьют охоту продолжать этот цикл и он не ограничится только вводной статьей.

                            Спасибо за ревью книжек.
                        +1
                        А расскажите для каких задач лучше всего подходит Go? и заточен ли он вообще для чего-то?

                          +1
                          Авторы языка, среди которых Роб Пайк и Кен Томпсон, позиционируют его как язык общего назначения. Хотя я пока что вижу как его используют только в веб (vitess используется в YouTube) и как заявляет Роб Пайк внутри Google он тоже используется. Ну и плюс Google App Engine Go 1 SDK есть.
                          +1
                          На данный момент, у меня сложилось впечатление, что он целиком и польностью заточен под создание сетевых сервисов самого раличного плана. Во первых замечательный модуль «net» с которым можно за 5 минут сделать нужный socket, rpc или web сервер. Во вторых удобные concurrent примитивы — goroutines и channels. Плюс ко всему этому весь ваш код автоматически асинхронный без ужасных callback-ов — планировщик goroutines планирует исходя из системных вызовов.
                            +4
                            Хм. Проще сказать для чего он не подходит. Для написания драйверов он подходит не очень хорошо (хотя в описании языка его называют вполне пригодным для системного программирования). Для каких-то особо критичных по быстродействию задача — тоже. Но для всего, для чего подходит Python или Java — Go подойдёт лучше.

                            В своих проектах мы используем Go уже больше года в продакшене, а до этого ещё год гоняли в бетах и девах. Если говорить конкретно о нашем случае, то мы применяем Go для создания HiLoad («без пяти минут realtime») веб-приложений, способных отвечать динамическими результатами практически со скоростью отдачи статики Nginx-ом*

                            Почему был выбран Go — разговор отдельный. Если коротко, то требовалось достичь оптимальной эффективности по двум критериям — скорость и простота разработки/отладки/поддержки и непосредственное быстродействие. Вне всяких сомнений C++/C и даже FreePascal решения оказываются быстрее, но они же значительно проигрывают в простоте реализации. И меня с первого взгляда покорила уже много раз упомянутая реализация concurrent, равно как и поддержка Unicode на таком уровне, что переменные или функции можно называть по русски (хоть это и не самая мудрая мысль, но для дев-версий бывает удобно писать Разобрать(ДанныеКлиента)

                            * — при использовании GCCGO, вместо нативного Go.
                              –1
                              А как вы относитесь к проблеме с библиотеками, скажем, для того же доступа к БД? Меня сильно, в своё время, оттолкнуло то, что для каждой задачи 150 библиотек и не ясно какая хорошая, какая плохая, какая загнётся завтра, а какая через 5 лет. Копаться во всех этом ворохе, тестировать — терять время.
                                0
                                Не замечал в Go такой проблемы :) Две-три библиотеки на DB, отличающиеся стилем кода.
                                  0
                                  Хорошо, приведу пример:

                                  mysqlgo — MySQL bindings for Go by Eden Li.
                                  libmysqlgo — Another wrapper for the MySQL C API, by Bourke Floyd.
                                  go-mysql — MySQL wrapper for Go by Masaaki Yonebayashi.
                                  GoMySQL — A quite complete threadsafe MySQL client library written in Go. By Phil Bayfield.
                                  mysql-connector-go is a package to connect to MySQL from Go by Gerben Peters.
                                  MySQL Client Library A MySQL client lib in Go. By thoj.
                                  MyMySQL — Another MySQL client library written in pure Go. By Michał Derkacz.

                                  И это только то, что более-менее на слуху. Кто все эти люди и стоит ли им доверять кусочек своего проекта? :)
                                    0
                                    И это только то, что более-менее на слуху. Кто все эти люди и стоит ли им доверять кусочек своего проекта? :)

                                    Это можно сказать про любой open-source проект, будь то Python, Ruby или Lua :)
                            0
                            Начал с Go разбираться сегодня. Скажите, кто в чем пишет? Есть ли нормальные IDE ну или плагины какие к ныне существующим средам? А то хардкор надоедает)
                            Хотя хоть что-то нашел на golanguage.ru наверное и нет ничего больше. Хотел к Eclipse прикрутить плагин, но его вроде как уже и не существует. Так и приходится обходиться Notepad++
                              +1
                              Так и приходится обходиться Notepad++
                              В этом есть и олдскульность, и даже легкий налет хардкорности…
                                –1
                                Лично мне удобно писать любой код (включая Go) в Smultron, что касается IDE, то существует кроссплатформенная, опен-сорс LiteIDE
                                  –1
                                  спасибо! Установил. Но не могу ничего в ней запустить. Вот что на выходе:



                                  Не подскажете что напутал?
                                    0
                                    ой-ой. Дико извиняюсь. Вот код:

                                    < action id=«Build» cmd="$(GO)" args=«build»>

                                    < start=" build" workdir=""/>
                                    < error msg=«process failed to start» />

                                    </action>
                                  +2
                                  Хотел к Eclipse прикрутить плагин, но его вроде как уже и не существует.

                                  Как не существует? Вот на днях вышла версия 0.7.1: code.google.com/p/goclipse/
                                    0
                                    Я в TextMate 1 пишу (TextMate 2 пока что не поддерживает). Где-то в интернете видел список – там и Geany, Sublime и другие.

                                    А вообще есть набор плагинов для vim с автодополнением и не только.
                                      0
                                      Думаю, говоря «где-то в интернете» вы имели ввиду вот этот список. Это наиболее полный (из известных мне) список расширений для IDE и подсветка синтаксиса для большинства редакторов.
                                        0
                                        А на PhpStorm кто-нибудь пытался ставить расширение от Идеи? Поставилось без проблем, но кажется мне совсем не работает.
                                    –2
                                    А нумерация версий будет такая же, как и у Хрома?
                                      +2
                                      Наконец будет куда положить свои сетевые тулзы на Go, которые уже год разрабатываю.
                                      Надеюсь пригодятся и как пример программирования и для применения по назначению.
                                      Спасибо всем за ссылки на книги, теперь знаю что можно давать желающим изучить основы языка.
                                      Go rockz!
                                        0
                                        Не откладывайте в долгий ящик! Ждём интересных постов.
                                        0
                                        А кто какой компилятор использует?)
                                          0
                                          Для dev — родной Go, для продкшена — GCCGO.
                                            –1
                                            натыкался на статью, что мол GCCGO хоть и более медленный но генерирует более эффективный код. Так ли это?
                                              +1
                                              Действует принцип «лучше день потерять, потом за пять минут долетать» :) Покуда идёт разработка и отладка, эффективнее использовать родной Go, компилирующий моментально. Хотя если разрабтывается малый/средний проект, то и GCCGO работает достаточно быстро. Но вот для финальной продакшн-версии используется однозначно GCCGO. Уж не вникал какими именно бубноплясками это достигается, но производительность (эффективность бинарного кода) действительно значительно выше.
                                            0
                                            Использую 6g, потому что из коробки. Более опытные товарищи используют gccgo
                                            +1
                                            Miek Gieben прислал твит, что книгу скачали 1200 раз (с момента публикации топика).
                                              0
                                              Доброго времени суток! Спасибо за информацию и полезные ссылки. У меня вопрос по поводу ссылки на pdf-книгу: по указанной ссылке имеется огромное множество документов, которые отсортированы по дате, начиная с самой старой и заканчивая самой новой. Вижу, что имеется два варианта книги: [ДАТА]-go.pdf и [ДАТА]-go-kindle.pdf. Однако вариантов книги множество. По количеству страниц самые старые версии равны самым новым. Причём я вижу, что каждый день выкладывается новый вариант книги…

                                              Она что, действительно ежедневно правится, или это какой-то скрипт её ежедневно считывает с некоторого репозитория и выкладывает в инет, не проверяя та же это книга или обновлённая?

                                              Спасибо
                                                0
                                                И её вопрос: я просмотрел оглавление книг — оно одинаково, но по объёму страниц книги отличаются друг от друга в 2 раза. Я так понимаю, что «самая толстая» — самая полная. Для чего тогда имеется второй вариант, уменьшенный в 2 раза?

                                                Спасибо.
                                                  +1
                                                  Книга собирается из исходников каждый день. Наличие изменений не проверяется.
                                                  [ДАТА]-go.pdf и [ДАТА]-go-kindle.pdf различаются только размером станицы (21 x 29,7 см и 9 x 11.5 см соответственно). Если будете читать с компьютера или печатать — то берите [ДАТА]-go.pdf, если с ридера (Nook, Kindle, Sony и т.п.) — берите [ДАТА]-go-kindle.pdf.
                                                    0
                                                    Благодарю за разъяснения.

                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                              Самое читаемое