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