Бэкэнд-разработка сейчас является горячей темой, и существуют буквально тысячи языков, на которых можно написать сервер. У вас есть самый старый из соперников PHP, у вас есть Ruby, Python, Java, C ++, JavaScript и множество других языков.
Голанг, или просто Го, относительно нов в этой области. Он написан Google, скомпилирован, статически типизирован и ориентирован в основном на работу в сети. Вот некоторые особенности Go, которые делают его отличным выбором для работы на сервере.
- Скорость: Go компилируется в машинный код, что делает его очень быстрым и дает преимущество перед другими интерпретируемыми языками, такими как Ruby, Python или JavaScript.
- Статическая типизация. Go - это язык со статической и строгой типизацией. Таким образом, компилятор может поймать множество ошибок из-за типов переменных во время компиляции. Например, в JavaScript внезапное приведение типа может привести к неожиданным результатам или ошибкам во время выполнения (подумайте о «5» + 5 = «55»). В Go дело обстоит иначе.
- Легко выучить: синтаксис Go основан на C, и его легко выучить. Go не перегружен функциями и не занимает много времени, чтобы понять концепции.
- Параллелизм. Это преимущество Go. В Go есть горутины (каламбур на сопрограммах), которые представляют собой легкие процессы. Go обеспечивает не только параллелизм ЦП, но и асинхронные операции. Использовать горутину так же просто, как поставить
go
перед именем функции, а обмен данными между горутинами по каналам очень прост. - Отличная стандартная библиотека: Go имеет богатую стандартную библиотеку, которая упрощает обработку операций ввода-вывода, написание серверов, управление криптографическими работами и т. д.
- Тестирование. Для тестирования не требуется никаких внешних зависимостей. Если у вас есть
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 пакета, которые мы будем использовать.
- fmt: чтобы отформатировать и написать ответ
- net / http: Чтобы создать сервер
- mux: для записи маршрутизатора.
- время: чтобы узнать текущее время
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 год и 🕸️ Изучите веб-разработку с полным стеком .