Бэкэнд-разработка сейчас является горячей темой, и существуют буквально тысячи языков, на которых можно написать сервер. У вас есть самый старый из соперников PHP, у вас есть Ruby, Python, Java, C ++, JavaScript и множество других языков.

Голанг, или просто Го, относительно нов в этой области. Он написан Google, скомпилирован, статически типизирован и ориентирован в основном на работу в сети. Вот некоторые особенности Go, которые делают его отличным выбором для работы на сервере.

  1. Скорость: Go компилируется в машинный код, что делает его очень быстрым и дает преимущество перед другими интерпретируемыми языками, такими как Ruby, Python или JavaScript.
  2. Статическая типизация. Go - это язык со статической и строгой типизацией. Таким образом, компилятор может поймать множество ошибок из-за типов переменных во время компиляции. Например, в JavaScript внезапное приведение типа может привести к неожиданным результатам или ошибкам во время выполнения (подумайте о «5» + 5 = «55»). В Go дело обстоит иначе.
  3. Легко выучить: синтаксис Go основан на C, и его легко выучить. Go не перегружен функциями и не занимает много времени, чтобы понять концепции.
  4. Параллелизм. Это преимущество Go. В Go есть горутины (каламбур на сопрограммах), которые представляют собой легкие процессы. Go обеспечивает не только параллелизм ЦП, но и асинхронные операции. Использовать горутину так же просто, как поставить go перед именем функции, а обмен данными между горутинами по каналам очень прост.
  5. Отличная стандартная библиотека: Go имеет богатую стандартную библиотеку, которая упрощает обработку операций ввода-вывода, написание серверов, управление криптографическими работами и т. д.
  6. Тестирование. Для тестирования не требуется никаких внешних зависимостей. Если у вас есть file.go, напишите свои тесты в file_test.go, а затем запустите go test и вуаля!

Теперь давайте напишем простой небольшой сервер на Go. Это будет просто базовый сервер, который покажет вам текущее время.

Установка Go

Для начала нужно установить Go. Для этого отправлю вас в официальную документацию.

После того, как вы установили Go, вы можете переходить к части программирования.

Настройка

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

Сначала мы создадим каталог с именем go-server в каталоге установки Go. В Linux это будет ~/go/src/. В Linux вы можете запустить эту команду -

mkdir -p ~/go/src/${USER}/go-server

Теперь у вас будет каталог в ~/go/src/your_username/

Написание сервера

Теперь мы готовы написать код, но сначала нам нужно загрузить пакет mux. Итак, запустите эту команду -

go get -u github.com/gorilla/mux

Это установит пакет mux, и мы сможем использовать его в нашем проекте.

Теперь перейдите в только что созданный каталог, создайте файл с именем main.go и напишите следующее

package main
import(
        "fmt"
        "net/http"
        "github.com/gorilla/mux"
        "time"
)
func main() {
        r := mux.NewRouter()
        r.HandleFunc("/time", GetTime)
        http.ListenAndServe(":8000", r)
}
func GetTime(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Current time is %s\n", time.Now())
}

Попробуем разобраться в происходящем.

package main

Эта строка сообщает компилятору, что файл является частью «основного» пакета. Пакеты можно рассматривать как логические единицы, которые можно импортировать в другое место.

import (
...
)

Эта строка импортирует 4 пакета, которые мы будем использовать.

  1. fmt: чтобы отформатировать и написать ответ
  2. net / http: Чтобы создать сервер
  3. mux: для записи маршрутизатора.
  4. время: чтобы узнать текущее время
func main() {
...
}

Это определяет функцию main. Это функция, которая будет запущена.

r := mux.NewRouter()

Это создает переменную с именем r, которая является маршрутизатором мультиплексора. Маршрутизатор управляет маршрутами вашего сервера. Он принимает входящий запрос и сопоставляет его с набором зарегистрированных маршрутов и, соответственно, управляет запросом.

r.HandleFunc("/time", GetTime)

Здесь мы регистрируем маршрут с именем «/ time» и сообщаем маршрутизатору, что если у нас есть запрос в маршруте «/ time», вы вызываете функцию GetTime () (определенную позже).

http.ListenAndServe(":8000", r)

Наконец, мы запускаем сервер на порту 8000 и передаем маршрутизатор.

Давайте посмотрим на функцию GetTime

func GetTime(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Current time is %s\n", time.Now())
}

Функции маршрута должны принимать два параметра. Один - это http.ResponseWriter, а другой - *http.Request (указатель на http.Request). Здесь мы назвали w и r соответственно.

w будет использоваться для записи в ответ, а r будет использоваться для доступа к запросу. Здесь нам нечего получить из запроса, поэтому мы просто пишем в ответ, используя fmt.Fprintf. Текущее время берем с помощью time.Now().

Запуск сервера

Убедитесь, что вы находитесь в том же каталоге, что и файл main.go. Затем запустите эту команду -

go run main.go

Теперь вы сможете нажать localhost:8000 и получить ответ -

curl localhost:8000/time

И вот ответ -

Current time is 2018-10-13 00:34:09.017262763 +0530 IST m=+1.012663595

Заключение

Итак, теперь вы знаете, как написать простой сервер на Go. Вы можете попробовать самостоятельно реализовать новые маршруты. Например, нажатие / time / day даст только день, нажатие / time / month даст только месяц и так далее!

Следите за моим блогом на http://www.codingskillsnull.xyz

✉️ Подпишитесь на рассылку еженедельно Email Blast от CodeBurst 🐦 Подпишитесь на CodeBurst на Twitter , просмотрите 🗺️ Дорожная карта веб-разработчиков на 2018 год и 🕸️ Изучите веб-разработку с полным стеком .