Обучение веб-разработке Go с нуля

Привет, ребята, я Сэм Чжан.

Сегодня я хотел изучить область разработки бэкенда – поэтому я выбрал Go. Основная причина, по которой я выбрал Go вместо других языков (таких как Java), заключается в том, что Go – это вроде как новый язык (по крайней мере, на мой взгляд).

И, к сожалению, у меня нет абсолютно никакого опыта в разработке на Go. Поэтому я начал эту серию блогов, чтобы следить за собой. Я буду стараться “записывать” то, что я сделал, и писать некоторые основные концепции в своих постах.

Конечно, поскольку я все еще начинающий (или новичок?) в Go, здесь могут быть некоторые неправильные вещи. Если это так, пожалуйста, оставьте мне комментарий, чтобы помочь мне исправиться!

Тогда давайте начнем!

Установка Go

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

Скачайте официальную программу установки на странице загрузки Go. Запустите его, и все готово!

По умолчанию Go поставляется с инструментом командной строки go. Он включает в себя набор команд, таких как run, get, mod и т.д. Наверняка, в этой серии я буду часто использовать эти команды. Ознакомьтесь с полным списком команд здесь.

Установка Gin

Я погуглил о том, какой веб-фреймворк Go является лучшим для начинающих, но оказалось, что это не так уж и полезно. Однако во многих из них упоминался Gin, который имеет почти 60 тысяч звезд на GitHub. Поэтому я выбрал Gin в качестве своего фреймворка для начала работы.

Создайте новую папку для вашего проекта и следуйте инструкциям по установке.

Устранение неполадок

Если вы такой же новичок, как и я, вы можете столкнуться со следующей проблемой при запуске go get:

$ go get -u github.com/gin-gonic/gin
go: go.mod file not found in current directory or any parent directory.
        'go get' is no longer supported outside a module.
        To build and install a command, use 'go install' with a version,
        like 'go install example.com/cmd@latest'
        For more information, see https://golang.org/doc/go-get-install-deprecation
        or run 'go help get' or 'go help install'.
Войдите в полноэкранный режим Выход из полноэкранного режима

Это означает, что у вас нет модуля, созданного в текущей папке. go mod – это команда для управления модулями Go. Мы будем использовать команду go mod init для создания нового модуля.

Команда go mod init принимает один аргумент, module-path . Я сейчас не очень уверен в этом аргументе и понимаю его как имя модуля. Формат module-path должен быть следующим:

lorem/ipsum/dor
Войти в полноэкранный режим Выйти из полноэкранного режима

Затем запустите go mod init <module-path>, заменив <module-path> на ваш собственный путь к модулю. После этого вы сможете правильно установить gin-gonic.

Написание первого запроса Gin

Итак, теперь у нас все готово с окружениями. Давайте напишем простой запрос “Hello World” на языке Go.

Создайте новый файл с именем main.go в корневой папке и заполните его следующим кодом:

package main

import (
    "net/http"

    "github.com/gin-gonic/gin"
)

func main() {
    router := gin.Default()  // router with default middleware installed
    // index route
    router.GET("/", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{
            "message": "Hello World",
        })
    })
    // run the server
    router.Run()
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Затем запустите go run main.go и откройте http://localhost:8080 . Надеюсь, Hello World появится нормально:

{
    "message": "Hello World"
}
Войти в полноэкранный режим Выход из полноэкранного режима

Понимание кода Hello World

Итак… что, черт возьми, здесь происходит? Давайте посмотрим на наш код.

Мы объявили пакет main и импортировали несколько полезных пакетов в наш код. Я постараюсь изо всех сил объяснить код функции main() построчно.

Итак, в строке 10 мы объявили переменную router. gin.Default возвращает маршрутизатор с подключенным промежуточным ПО по умолчанию (такие вещи, как Logger и Recovery middleware). Вы можете задаться вопросом, что такое :=? Ну, это похоже на = в других языках программирования. В Golang один = означает присвоение, а := означает объявление и присвоение. Например:

var router = gin.Default()
Войти в полноэкранный режим Выйти из полноэкранного режима

Эквивалентно:

router := gin.Default()
Войти в полноэкранный режим Выйти из полноэкранного режима

Оператор := используется в объявлениях коротких переменных. Более подробную информацию см. в этом вопросе на StackOverflow.

В строках 12 ~ 16 мы определили GET-запрос, который отображается на / и возвращает JSON-ответ. router.GET(), конечно же, определяет GET-запрос. Его второй аргумент принимает вызываемую функцию, а эта функция получает аргумент с типом gin.Context.

В данном случае переменная контекста имеет имя c. *gin.Context – это указатель на значение gin.Context. Контексты в Gin предоставляют множество возможностей, таких как промежуточное программное обеспечение и ответы. Для китайских читателей вы можете взглянуть на эту статью для более детального рассмотрения gin.Context.

В строке 13 мы вызвали c.JSON(), чтобы ответить на этот запрос с содержимым, MIME-тип которого application/json. http.StatusOK – это константная переменная для кода состояния HTTP 200 success, которая взята из встроенного пакета net/http.

gin.H – это сокращенная версия определения типа для данных JSON. Если вы хотите вложить объекты JSON внутрь объектов JSON, вы можете написать что-то вроде:

gin.H{
    "some-data": gin.H{
        "message": "success"
    }
}
Войти в полноэкранный режим Выйти из полноэкранного режима

И наконец, в строке 18 мы запускаем сервер на стандартном порту 8080.

Живая перезагрузка

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

Поэтому некоторые веб-фреймворки (например, Python Flask) имеют встроенный горячий перезагрузчик для сервера разработки. К сожалению, Gin не поставляется с этим. Я решил использовать Air в качестве автозагрузчика, но, конечно, вы можете использовать и другие.

Установить Air довольно просто. Выполните следующую команду, чтобы установить его:

curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin
Войти в полноэкранный режим Выйти из полноэкранного режима

Это установит Air в ваш $GOPATH, который по умолчанию ~/go . Затем добавьте его в ваш $PATH, добавив следующую строку в ваш .bashrc (или .zshrc):

export PATH=$PATH:$(go env GOPATH)/bin
Войти в полноэкранный режим Выйти из полноэкранного режима

…и все готово! Запустите air init, чтобы создать конфигурацию Air по умолчанию.

Использовать Air еще проще. Просто запустите air в командной строке, и Air запустит main.go в текущей папке и будет автоматически следить за изменениями в вашем исходном коде.

Совет для пользователей macOS: если вы не хотите видеть раздражающее всплывающее окно каждый раз, когда Air перезагружает ваш код, просто замените

router.Run()
Войти в полноэкранный режим Выйти из полноэкранного режима

на

router.Run("localhost:8080")
Ввести полноэкранный режим Выйти из полноэкранного режима

Заключение

Итак… Я наконец-то закончил Gin hello world! Я выложил весь исходный код на GitHub и, надеюсь, буду его обновлять. Клонируйте его, если вы нашли что-то полезное или просто хотите поиграть!

Я Сэм Чжан, увидимся в следующий раз!

Оцените статью
Procodings.ru
Добавить комментарий