19 августа 2016 г.

HTML формы и Go

Перевод статьи "HTML Forms and Go".

Это небольшой отрывок из моей книги "Go Web Programming", в котором рассказывается о использовании языка программирования Go для обработки данных из HTML форм. Это звучит достаточно тривиально, но, как и многое в веб-программировании (и программировании в принципе), эти тривиальные вещи часто оказываются камнем преткновения.

Перед тем как мы разберемся с обработкой данных из форм на стороне сервера, давайте чуть более внимательно посмотрим на их HTML описание. Чаще всего, POST реквесты приходят из HTML форм которые выглядят аналогично этому примеру:
<form action="/process" method="post">
<input type="text" name="first_name"/>
<input type="text" name="last_name"/>
<input type="submit"/>
</form>
Внутри HTML формы мы можем разместить различные элементы, такие как текстовые поля ввода (text), текстовые области (textarea), переключатели (radiobutton), поля для множественного выбора (checkboxes), поля для загрузки файлов и многое другое. Эти элементы позволяют пользователям ввести данные, которые будут отправлены на сервер. Отправка происходит после того, как пользователь нажмет кнопку, или некоторым другим способом сработает триггер отправки формы.

HTTPS и Go

Это перевод статьи "HTTPS and Go". Статья больше для новичков, чем для матерых гоферов, но есть полезная информация для всех программистов.

Работа с HTTP сервером - это одна из первых задач, с которой сталкивается начинающий Go программист.

Реализовать простенький HTTP сервер на Go легко. Необходимо написать всего пару строк кода и у вас готов и работает сервер на 8080 порту:
package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Привет!")
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}
Откройте страничку https://127.0.0.1:8080 в вашем браузере и вы увидите сообщение "Привет!".

Но что если вам нужно работаться с защищенным HTTPS соединением? В первом приближении, это достаточно просто. Для этого можно использовать метод ListenAndServeTLS, вместо http.ListenAndServe(":8080", nil).
http.ListenAndServeTLS(":8081", "cert.pem", "key.pem", nil)
И все готово. Ну, почти. Эта функция получает на два аргумента больше: "cert.pem" - ваш серверный сертификат в PEM формате, "key.pem" - приватный ключ в PEM формате.

Получение сертификата для сервера и приватного ключа


Использование OpenSSL

Вы можете легко сгенерировать оба файла с помощью OpenSSL. OpenSSL поставляется в Mac OS X и Linux. Если вы используете Windows, то вам нужно установить бинарники отдельно.

3 августа 2016 г.

Установка и настройка MinGW-w64

Язык программирования Go позволяет делать вставки и линковать библиотеки написанные на языке C. Для такой совместной компиляции в системе необходимо наличие компилятора GCC. В большинстве дистрибутивов Linux компилятор GCC установлен по умолчанию. А в операционной системе Windows его необходимо установить дополнительно.

Инструкция по установке компилятора GCC в Windows:
  1. Скачать web установщик mingw-w64-install.exe со странички проекта MinGW-w64 - for 32 and 64 bit Windows.
  2. Во время установки (необходимо соединение с интернет) выбрать нужную архитектуру: i686 для 32 бит и x86_64 для 64 битной версии компилятора. Остальные параметры можно оставить по умолчанию.
  3. Затем указать в какую директорию будет произведена установка (желательно чтобы путь до директории был короче).
  4. После установки необходимо прописать путь до компилятора в системную переменную PATH. Пропишите путь до папки bin находящейся в директории в которую была произведена установка. Пример пути: c:\mingw-w64\i686-6.1.0-posix\mingw32\bin
  5. После этого проверьте в консоли, что по команде gcc -v выводится версия компилятора.
  6. Теперь вам доступен набор стандартных утилит сопутствующих компилятору GCC. Для сборки используется утилита: mingw32-make
  7. Также теперь вам доступна утилита strip для уменьшения размера скомпилированных исполняемых файлов. Для этого нужно набрать в консоли команду: strip -s путь_к_файлу
    В результате из файла будут удалены все символы для отладки и информация о "релоках", что существенно уменьшит размер исполняемого файла.
Скриншоты иллюстрирующие процесс установки MinGW-w64

26 июля 2016 г.

Установка Go и настройка рабочего окружения

Краткая инструкция по установке языка программирования Go и быстрой настройке рабочего окружения.

Для пользователей Windows:
  1. Скачать с сайта https://golang.org установочный пакет Go в формате MSI и установить.
  2. Убедиться, что в консоли по команде go version выводится установленная версия Go.
  3. Создать папку c:\GoPath в которую будут скачиваться исходники сторонних проектов (зависимости от сторонних библиотек).
  4. Добавить в системные переменные GOPATH и прописать в ней путь к созданной папке.
  5. Также нужно добавить %GOPATH%\bin в системную переменную PATH (пути добавляются через разделитель ";").
  6. Убедиться, что путь прописанный в GOPATH отображается в переменных Go по команде в консоли: go env
  7. Установить программу Git c сайта https://git-scm.com
  8. Убедиться, что в консоли по команде git --version выводится версия установленного Git.
  9. Затем установить MinGW-w64 (инструкция по установке).
  10. Добавить в системную переменную PATH путь до установленного компилятора. Пример пути: c:\mingw-w64\i686-6.1.0-posix\mingw32\bin
  11. Убедиться, что в консоли по команде gcc -v выводится версия компилятора.
  12. Теперь загрузка исходников (со всеми зависимостями) автоматически будет происходить в папку указанную в переменной GOPATH по команде в консоли: go get -u github.com/<author>/project
Для пользователей Linux и Mac:
  1. Установить готовый пакет Go для вашего дистрибутива.
  2. Убедиться, что в терминале по команде go version выводится установленная версия Go.
  3. В домашней директории пользователя создать папку GoPath в которую будут скачиваться исходники сторонних проектов (зависимости от сторонних библиотек).
  4. В домашней директории пользователя создать файл .bashrc и прописать в нём строки:
    export GOPATH="$HOME/GoPath"
    export PATH="$PATH:$GOPATH/bin"
  5. Закрыть все запущенные экземпляры терминала (для обновления настроек).
  6. Убедиться, что путь прописанный в GOPATH отображается в переменных Go по команде в терминале: go env
  7. Установить пакет с программой Git (обычно уже установлен в большинстве дистрибутивов).
  8. Убедиться, что в терминале по команде git --version выводится версия установленного Git.
  9. Установить пакет GCC компилятора со всеми необходимыми инструментами для компиляции (обычно уже установлен в большинстве дистрибутивов).
  10. Убедиться, что в терминале по команде gcc -v выводится версия компилятора.
  11. Теперь загрузка исходников (со всеми зависимостями) автоматически будет происходить в папку указанную в переменной GOPATH по команде в терминале: go get -u github.com/<author>/project
Для дополнительного удобства программирования на Go можно установить кроссплатформенную интегрированную среду разработки LiteIDE.

13 июля 2016 г.

Подборка изображений Golang Gophers (Гоферов)

Большая коллекция изображений "Гофера" (Gopher), который является талисманом языка программирования Go. История возникновения гофера, и почему он был выбран талисманом, доступна в официальном блоге Go.

Ссылка на скачивание архива с гоферами: Скачать Go Gopher Pack
По ссылке архив, сжатый архиватором: 7-zip

11 июля 2016 г.

Использование языка C в Go программах

Статья, которая послужит памяткой по использованию "сишного" кода в программах на Go. Для профи тут мало чего интересного, но новичкам будет полезно.

Cgo

Go настолько замечательный язык, что его можно использовать не только вместо языка Си, но и вместе с Си. Для этого есть специальная "тулза" cgo. И есть замечательная статья, которая объясняет основы использования cgo. Но там, как пример, приводится использование только стандартных библиотечных функций. В этой же статье я попытался показать маленький пример, как использовать cgo для работы со своими кусками "сишного" кода.

C в Go

Для использования Си кода проще всего создать библиотеку, которую можно будет линковать с нашей программой.

В директории нашего Go проекта создадим директорию: c_lib
Затем в директории c_lib создадим файл: example.c
int x(int y) {
    return y+1;
}

1 июля 2016 г.

Примеры из книги Programming in Go

Архив с примерами из книги Programming in Go by Mark Summerfield.
Примеры адаптированы под Go версии 1.6

Ссылка на скачивание примеров: Скачать Go Examples
По ссылке архив, сжатый архиватором: 7-zip

Programming in Go
Обложка книги Programming in Go

Названия пакетов Go

Перевод статьи "Package names" (автор Sameer Ajmani).

Введение

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

Годные имена пакетов делают код лучше. Имя пакета определяет некоторый контекст для содержимого этого пакета и это позволяет клиентам лучше понимать зачем и как можно его использовать. Также, название помогает сопровождать пакет, определяет что входит в обязанности данного пакета, а что нет. Пакеты с хорошими названиями позволяют проще и быстрей находить необходимый код.

В "Effective Go" описаны некоторые базовые принципы именования пакетов, типов, функций и переменных. В этой статье мы продолжим разговор и рассмотрим несколько примеров названий для пакетов из стандартной библиотеки. А также, поговорим о плохих именах, и как от них избавляться.

13 апреля 2016 г.

Подсказки по Golang

Подсказки по основам языка программирования Go.

Комментарии
// Package path implements utility
// routines for manipulating
// slash-separated filename paths.

/*
Package path implements utility
routines for manipulating
slash-separated filename paths.
*/

8 апреля 2016 г.

Learning Go (электронная книга на английском)

Хорошая книга! В ней подробно описаны основы языка Go и большое количество примеров кода. Книга выполнена в формате HTML. К книге прилагаются исходные коды примеров из книги.

Сборка книги актуальная и произведена 8.04.2016 числа из исходного кода.

Книга доступна по Attribution-NonCommercial-ShareAlike 3.0 Unported лицензии для некоммерческого использования.

Ссылка на скачивание книги: Скачать Learning Go
По ссылке архив, сжатый архиватором: 7-zip


Переводчик: Miek Gieben
Источник: https://miek.nl/go/
Исходники книги: https://github.com/miekg/learninggo

Go Bootcamp (электронная книга на английском)

Ещё одна книга рассказывающая об основах языка Go и некоторых трюках с ним.

Книга доступна по Creative Commons Attribution 3.0 лицензии для некоммерческого использования.

Ссылка на скачивание книги: Скачать Go Bootcamp
По ссылке архив, сжатый архиватором: 7-zip


Автор: Matt Aimonetti
Источник: http://www.golangbootcamp.com
Исходники книги: https://github.com/GoBootcamp/book

7 апреля 2016 г.

Build Web Application with Golang (электронная книга на английском)

Замечательная книга! Описывает основы языка Go. Создание Web ориентированных приложений и сервисов на Go. Подводит читателя к использованию HTTP фреймворка BeeGo для быстрой разработки Go приложений. Также в книге рассматриваются основы Web безопасности и многое другое. К книге прилагаются исходные коды примеров из книги.

Книга доступна по CC BY-SA 3.0 лицензии для некоммерческого использования.

Ссылка на скачивание книги: Скачать Build Web Application with Golang
По ссылке архив, сжатый архиватором: 7-zip

Build Web Application with Golang (электронная книга на английском)

Источник: https://github.com/astaxie/build-web-application-with-golang

4 апреля 2016 г.

Building Web Apps with Go (электронная книга на английском)

Данная книга описывает один из способов организации Web приложений и сервисов основанных на языке программирования Go.

Ссылка на скачивание книги: Скачать Building Web Apps with Go
По ссылке архив, сжатый архиватором: 7-zip

Building Web Apps with Go

Автор книги: Jeremy Saenz
Источник: https://www.gitbook.com/@codegangsta
Проекты автора: https://github.com/codegangsta
Блог автора: https://codegangsta.io

2 апреля 2016 г.

Network Programming with Go (электронная книга на английском)

Данная книга посвящена аспектам создания сетевых приложений и сервисов на языке программирования Go. Рассматривается работа с конкретными сетевыми протоколами и форматами передачи данных.

Книга доступна по Creative Commons лицензии для некоммерческого использования.

Ссылка на скачивание книги: Скачать Network Programming with Go
По ссылке архив, сжатый архиватором: 7-zip

Jan Newmarch
Jan Newmarch
Автор книги: Jan Newmarch
Источник: https://www.gitbook.com/@jannewmarch

31 марта 2016 г.

Канал Golang в интернет рации Zello

Если вы хотите пообщаться в голосовом формате по теме языка программирования Go, то милости просим на канал Golang в интернет рации Zello.

Ссылка на страничку канала Golang в Zello

Преимущества общения в канале интернет рации Zello:
  1. Канал статический и доступен 24 часа в сутки.
  2. Интернет рация Zello работает на платформах: PC, Android, iPhone, Windows Phone.
  3. Возможность назначить администраторов и модераторов канала.

Как подключиться к каналу?
  1. Устанавливаете с сайта Zello.com приложение для своей платформы.
  2. Запускаете Zello и регистрируете аккаунт.
  3. После входа проверяете настройку своего микрофона на контакте "echo".
  4. Делаете поиск канала "Golang" и добавляете его себе.
Постер канала Golang в Zello
Постер канала Golang в Zello

Изучите язык программирования Go за Y минут

Получить исходный код: learngo-ru.go

Go - это язык общего назначения, целью которого является удобство, простота, конкурентность. Это не тренд в компьютерных науках, а новейший и быстрый способ решать насущные проблемы.

Концепции Go схожи с другими императивными статически типизированными языками. Быстро компилируется и быстро исполняется, имеет лёгкие в понимании конструкции для создания масштабируемых и многопоточных программ.

Может похвастаться отличной стандартной библиотекой и большим комьюнити, полным энтузиастов.

30 марта 2016 г.

Краткий пересказ Effective Go (электронная книга на русском)

Перевод на русский руководства "Effective Go" для начинающих программистов на Go.
Перевод несколько устаревший, но не потерявший актуальности. Данное руководство полезно для понимания ключевых моментов языка.

Ссылка на скачивание книги: Скачать Краткий пересказ Effective Go
По ссылке архив, сжатый архиватором: 7-zip

Автор: Евгений Охотников

28 марта 2016 г.

Маленькая книга о Go (электронная книга на русском)

Перевод на русский книги "The Little Go Book" для начинающих программистов на Go.
В книге простым и доступным образом раскрываются основные возможности языка программирования Go.

Книга доступна по Attribution-NonCommercial-ShareAlike 4.0 International лицензии для некоммерческого использования.

Ссылка на скачивание книги: Скачать Маленькая книга о Go
По ссылке архив, сжатый архиватором: 7-zip

Маленькая книга о Go (электронная книга на русском)

Переводчик: Roman Dolgopolov
Источник: http://sefus.ru/little-go-book/

24 марта 2016 г.

Введение в программирование на Go (электронная книга на русском)

Перевод на русский книги "An introduction to programming in Go" для начинающих программистов на Go.
Этот вводный курс поможет вам не только ознакомиться с языком программирования Go, но и будет являться пособием по основным конструкциям языка.

Книга доступна по Creative Commons лицензии для некоммерческого использования.

Ссылка на скачивание книги: Скачать Введение в программирование на Go
По ссылке архив, сжатый архиватором: 7-zip

Русская версия электронной книги "Введение в программирование на Go"
Русская версия электронной книги "Введение в программирование на Go"
Переводчики: Максим Полетаев, Виктор Розаев и другие.
Источник: golang-book.ru
Исходники книги: github.com/zenwalker/golang-book

23 марта 2016 г.

Интегрированная среда разработки Lite IDE для Golang

Lite IDE for Golang

Кроссплатформенная интегрированная среда разработки Lite IDE X специально создана для разработки программного обеспечения на языке программирования Go.

Возможности и характеристики Lite IDE:
  • Простая и удобная
  • Кроссплатформенная
  • С открытым исходным кодом
  • Основные особенности:
    • Управление системной средой
    • Настраиваемые команды сборки
    • Простая и открытая система отладки
    • Формат Kate для автозавершения и тематизации
    • Настраиваемые автозавершения с WordApi
    • Система на основе MIME-типов
    • Поддержка плагинов
  • Поддержка Golang:
    • Браузер пакетов
    • Просмотр классов и вывода
    • Браузер документации
    • Поддержка Gocode
    • GOPATH API индексы
    • Навигация по коду
    • Поиск зависимостей
    • Рефакторинг кода
    • Песочница Go
  • Дополнительная поддержка:
    • Markdown
    • Json
    • Golang Present

Поддержка операционных систем:
  • Windows x86 (32-bit or 64-bit)
  • Linux x86 (32-bit or 64-bit)
  • MacOS X10.6 or higher (64-bit)
  • FreeBSD 9.2 or higher (32-bit or 64-bit)
  • OpenBSD 5.6 or higher (64-bit)

Скачать:

Главное окно Lite IDE X

26 января 2016 г.

Плюсы или почему я выбрал Go

Производительность

По производительности для веб (готовые фреймворки) Go проигрывает только Java и С / С++ и наравне с node.js. При этом потребление ресурсов существенно ниже чем у Java и намного большая производительность чем у Python / Ruby.

Многопоточность

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

Простота

Он очень прост в освоении. Мне кажется даже элементарен, особенно если есть основа из Python / JavaScript. Есть также довольно занятная модель наследования, которая, как мне кажется более прозрачна чем классическое ООП, но немного непривычна по началу.

Надёжность

Язык этот компилируемый и статически типизированный. Что даёт выявление многих ошибок задолго до продакшена. К примеру такие ошибки в Python выявляются только непосредственным тестированием и, если тестов нет, то шансов положить систему очень много. Тут же это исключается на этапе компиляции.

Скорость компиляции

И, наконец, одна из главнейших фишек - не стоит бояться типизации и компиляции. В 145% случаев Вам не придётся объявлять тип переменой в коде - он задаётся автоматически при присвоении ей значения. Объявлять переменные заранее также не нужно.
Ну и компиляция - главный конёк. Время компиляции, это то, на что делается главный упор при разработке языка. Оно не отличается от времени запуска интерпретируемого языка. То есть система, написанная на go, из нескомпилированных исходников запускается примерно с такой же скоростью как система аналогичной сложности, написанная на интерпретируемом языке.

Итого

То есть мы имеем плюсы из двух миров - скорость компиляции / запуска интерпретируемого и надёжность компилируемого языков. Плюс сверху производительность, мультипарадигменность (можно писать в функциональном стиле), простота и низкое ресурсопотребление.

Подходит ли это Вам решать не мне. Мне - подходит и я считаю его очень хорошим выбором для высоконагруженных сервисов (и не только).