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" описаны некоторые базовые принципы именования пакетов, типов, функций и переменных. В этой статье мы продолжим разговор и рассмотрим несколько примеров названий для пакетов из стандартной библиотеки. А также, поговорим о плохих именах, и как от них избавляться.