go-zero — это веб- и RPC-фреймворк с множеством встроенных инженерных практик. Он создан для обеспечения стабильной работы загруженных сервисов за счет использования дизайна с отказоустойчивостью и уже долгое время обслуживает сайты с десятками миллионов пользователей.
Английский | Китайский
go-zero (включён в ландшафт CNCF: https://landscape.cncf.io/?selected=go-zero) — это веб- и RPC-фреймворк с множеством встроенных инженерных практик. Он создан для обеспечения стабильной работы загруженных сервисов за счёт использования дизайна с отказоустойчивостью и уже долгое время обслуживает сайты с десятками миллионов пользователей. go-zero включает простой синтаксис описания API и инструмент генерации кода под названием
goctl
. Вы можете создавать код на Go, iOS, Android, Kotlin, Dart, TypeScript, JavaScript из файлов с расширением .api
с помощью goctl
.#### Преимущества go-zero:
В начале 2018 года мы решили перетасовать нашу систему, переходя от монолитной архитектуры на Java + MongoDB к микросервисной архитектуре. После исследований и сравнений мы сделали следующий выбор:
При проектировании микросервисной архитектуры мы стремились обеспечить стабильность и производительность. И уже с самого начала у нас были следующие принципы проектирования:
Почти через полгода мы завершили переход с монолитной системы на микросервисную систему и запустили её в августе 2018 года. Новая система обеспечила бизнес-рост и устойчивость системы.
Go-zero — это веб- и RPC-фреймворк, который объединяет множество инженерных практик. Основные характеристики приведены ниже:* Включает мощные инструменты, меньше кода для написания
net/http
Выполните следующую команду в вашем проекте:
go get -u github.com/zeromicro/go-zero
Полные примеры можно найти здесь:
Установка goctl
goctl
можно прочитать как go control
. goctl
означает, что вы не контролируете его кодом, а он контролирует вас. Внутренний go
не относится к golang. На начальной стадии я ожидал, что этот инструмент поможет нам повысить продуктивность и сделать нашу жизнь проще.
# для Go
go install github.com/zeromicro/go-zero/tools/goctl@latest
# Для Mac
brew install goctl
# Docker для архитектуры amd64
docker pull kevinwan/goctl
# запустите goctl следующей командой
docker run --rm -it -v $(pwd):/app kevinwan/goctl --help
# Docker для архитектуры arm64 (Mac)
docker pull kevinwan/goctl:latest-arm64
# запустите goctl следующей командой
docker run --rm -it -v $(pwd):/app kevinwan/goctl:latest-arm64 --help
Убедитесь, что goctl является исполняемым файлом.3. Создайте файл API, например greet.api. Вы можете установить плагин goctl в VS Code, где поддерживается синтаксис API.
type (
Request struct {
Name string `path:"name,options=[ты,меня]"` // параметры автоматически проверяются
}
)
```<Response>
<Message>строка `json:"message"`</Message>
</Response>
)
сервис greet-api {
@обработчик GreetHandler
получить /greet/from/:name(Запрос) возвращает (Ответ)
}
Файлы с расширением .api также могут быть сгенерированы командой goctl, как показано ниже:
```shell
goctl api -o greet.api
goctl api go -api greet.api -dir greet
Сгенерированные файлы выглядят следующим образом:
├── greet
│ ├── etc
│ │ └── greet-api.yaml // конфигурационный файл
│ ├── greet.go // основной файл
│ └── внутренняя
│ ├── конфигурация
│ │ └── config.go // определение конфигурации
│ ├── обработчики
│ │ ├── greethandler.go // здесь определяются маршруты get/put/post/delete
│ │ └── маршруты.go // список маршрутов
│ ├── логика
│ │ └── greetlogic.go // логика запроса может быть реализована здесь
│ ├── сервис
│ │ └── servicecontext.go // контекст сервиса, в который можно передать mysql/redis
│ └── типы
│ └── types.go // здесь определены запросы и ответы
└── greet.api // файл описания API
Сгенерированный код можно запустить непосредственно:
cd greet
go mod init
go mod tidy
go run greet.go -f etc/greet-api.yaml
По умолчанию он прослушивает порт OnClickListener.CLICK, но его можно изменить в конфигурационном файле.
Можно проверить это с помощью curl:
curl -i http://localhost:8888/greet/from/вас
Ответ выглядит следующим образом:
HTTP/1.1 200 OK
Date: Sun, 30 Aug 2020 15:32:35 GMT
Content-Length: 0
```5. Напишите бизнес-логику
* зависимости, такие как MySQL, Redis и т.д., могут быть переданы в логику через `servicecontext.go`.
* добавьте код логики в пакет `logic` согласно файлу `.api`.
6. Генерация кода на других языках, таких как Java, TypeScript, Dart, JavaScript и т.д., прямо из файла API.
```shell
goctl api java -api greet.api -dir greet
goctl api dart -api greet.api -dir greet
...
Присоединиться к чату через https://discord.gg/4JQvC5A4Fe
go-zero включена в CNCF Cloud Native Landscape.
Если вам нравится этот проект или вы используете его для обучения или запуска своего решения, пожалуйста, отметьте его звездой. Спасибо!
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )