06 апреля 2014

Пишем на Go (Golang)

Go замечательный язык программирования, который можно компилировать, компилировать под разные платформы(ARM, x86), распараллеливать. Он проще C/C++ и уже сформировавшийся язык в отличии от Rust который ломает программы с каждым обновлением. Область применения самая разная начиная от консольных утилит, всяких парсеров, системного, сетевого ПО, связи с физическими устройствами и заканчивая веб приложениями, разве что пока нету реализаций под смартфоны(android).
Если сравнивать с python то golang выигрывает в скорости, в многопоточных приложениях, там где требуется распространение через бинарники.

На Go уже написаны:
  • Docker - система легковесных контейнеров (переписан с python)
  • drone.io - система непрерывного тестирования, поддерживающая Docker(о ней я напишу отдельно скорее всего)
  • и огромное количество других проектов, что удивительно ведь go очень молодой проект, а ещё гугл
 Здесь я опишу процесс одной из возможных реализаций установки Go под Linux.

УСТАНОВКА


описано подробно в оф. документации http://golang.org/doc/install
Скачать архив и распаковать в ~/golang например:
tar -C ~/golang -xzf go1.2.1.linux-amd64.tar.gz

Добавляем в ~/.bashrc
# Go lang
export GOROOT=$HOME/golang
export PATH=$PATH:$GOROOT/bin 


создаем файл hello.go
package main

import "fmt"

func main() {
    fmt.Printf("hello, world\n")
}

и выполняем так
$ go run hello.go
hello, world

или компилируем
$ go build hello.go 
$ ./hello 
hello, world

теперь у нас установлен go в системе. Если вам нужно свои пакеты хранить в другой директории(не $HOME/golang), но при этом что бы они находились в общем окружении, то можно задать переменную окружения GOPATH. У меня всё вместе выглядит так:

# Go lang
export GOPATH=$HOME/Projects/go
export GOROOT=$HOME/golang
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

VIM

есть много дополнений для go но самая крутое из них это https://github.com/fatih/vim-go
пример .vimrc
au BufNewFile,BufRead *.go set ft=go nu
au FileType go map <leader>r :!go run %<CR>
Bundle "fatih/vim-go"

vim-go умеет:
  • подсветка синтаксиса
  • автодополнение кода gocode
  • автоформатирование кода через gofmt
  • автоимпорт недостающих библиотек goimports
  • проверять код на наличие ошибок с помощью golint
  • поддерживает снипеты ultisnips or neosnippet
  • и многое другое

 

КНИГИ

книг много, но на великом только одна от издательства ДМК пресс, к счастью есть эл.вариант книги хоть и в pdf
http://dmkpress.com/catalog/computer/programming/978-5-94074-854-0/

 

Ресурсы

http://4gophers.com/ (ru)
#go-nuts in the irc.freenode.org network.
http://blog.golang.org/
google group
reddit

 

AnyKey

Использование Си в Гоу
http://zacg.github.io/blog/2013/06/06/calling-c-plus-plus-code-from-go-with-swig/

ORM
https://github.com/eaigner/hood
https://github.com/jinzhu/gorm

Web
Revel
Gorilla
net/http

Список пакетов
https://code.google.com/p/go-wiki/wiki/Projects

Go для программистов C++
http://netsago.org/ru/docs/1/16/
http://eao197.narod.ru/desc/short_effective_go.html


Calling Go from Python via JSON-RPC
www.artima.com/weblogs/viewpost.jsp?thread=333589

Go для Python программистов
http://www.slideshare.net/kcherkasoff/go-for-pythonistas#

Тесты
http://smartystreets.github.io/goconvey/

Примеры
https://gobyexample.com/

CI
https://github.com/drone/drone

Хайлод++
http://www.youtube.com/watch?v=bqtN6XViejE

Туториал
http://tour.golang.org/


4 комментария:

  1. Анонимный06 апреля, 2014 17:45

    тот самый Марк )
    хоть и не обновляется уже, но все же: http://go-lang.cat-v.org/

    ОтветитьУдалить
  2. Анонимный07 апреля, 2014 18:13

    http://talks.golang.org/2013/go4python.slide Go for Pythonistas (Francesc Campoy Flores Gopher at Google)

    ОтветитьУдалить
  3. Оо, ссылочка на мой http://4gophers.com/ )) круто!
    Если есть желание написать статьи про гоу - буду рад опубликовать.

    ОтветитьУдалить
    Ответы
    1. Есть один проект с сокет сервером под АРМ на C++, если он не умрет то перепишу на Go ну и статью сделаю. А сайт вообще нормальный, постоянно читаю рассылку.

      Удалить