Выполнение команды: go-doudou svc grpc --http2grpc позволяет одновременно сгенерировать полный набор кода для .grpc интерфейсов и RESTful интерфейсов. Обработчики RESTful интерфейсов вызывают методы реализации, используя в качестве входных и выходных данных типы сообщений protobuf. Это значит, что RESTful интерфейсы и gRPC интерфейсы используют одну и ту же бизнес-логику.
Ограничения:
context.Context
. Второй параметр, если он есть, должен быть структурой из пакета dto
. Порядок параметров произвольный, но обычно контекст передается первым;error
. Второй параметр, если он есть, должен быть структурой из пакета dto
. Порядок параметров произвольный, но обычно ошибка передается последней;stream
-типовых gRPC интерфейсов; поддерживаются только unary
-типовыми gRPC интерфейсами.Добавлен механизм повторной отправки запросов с клиентской стороны. Если соединение с одним узлом не удалось, в соответствии с алгоритмом балансировки нагрузки, запрос будет повторно направлен на следующий узел.
При отправке запроса к сервису отфильтровывать узлы с пометкой suspect.
Добавлено гладкое взвешенное циклическое распределение нагрузки. Если переменная окружения GDD_MEM_WEIGHT не установлена, то каждые GDD_MEM_WEIGHT_INTERVAL вычисляется локальный вес узла на основе значений здоровья узла и доли свободного времени ЦП.
Поддержка загрузки нескольких конфигурационных файлов .env
, предназначенных для различных окружений, таких как .env.dev.local
, .env.test
, .env.prod
и т.д. Для использования этой возможности необходимо установить переменную окружения GDD_ENV
через командную строку, Dockerfile, файлы развертывания Kubernetes (k8s) или настройки запуска отладки в IDE. Эта возможность зависит от библиотеки godotenv; подробнее см. precedence-conventions.
Устранена проблема с предупреждением WARN[0000] Error loading .env file: open xxx/xxx/.env: no such file or directory
, возникающая при выполнении команды генерации кода go-doudou. Go-doudou состоит из двух частей: генератора кода и RESTful-фреймворка. Только RESTful-фреймворк требует чтения файла .env
для загрузки переменных окружения, а генератор кода — нет. Проблема заключалась в том, что код загрузки файла .env
был помещён в функцию init пакета config, которая использовалась также в генераторе кода. В результате при выполнении команды go-doudou через командную строку выводилось предупреждение о недоступности файла .env
. В версии 0.7.9 эта проблема была решена путём перемещения кода загрузки файла .env
в функцию InitEnv, которая больше не вызывается автоматически при старте программы, а должна явно вызываться в коде. Эта функция уже добавлена в сгенерированной функции main.3. К структуре Paging
пакета esutils добавлены поля Includes
и Excludes
, чтобы возвращались только необходимые поля, тем самым уменьшая размер ответа. Дополнительные объяснения доступны в документации Elasticsearch search-request-source-filtering.
К структуре Paging
пакета esutils добавлен метод String()
, который позволяет печатать удобочитаемый JSON-формат запроса Elasticsearch для удобства отладки.
func TestPaging_String(t *testing.T) {
p := Paging{
StartDate: "2021-01-01",
EndDate: "2021-10-31",
DateField: "submitTime",
QueryConds: []QueryCond{
{
Pair: map[string][]interface{}{
"user.keyword": {"wubin1989"},
"phone.keyword": {"123456"},
"district.keyword": {"Beijing"},
},
QueryLogic: MUST,
QueryType: TERMS,
},
{
Pair: map[string][]interface{}{
"score": {-1},
},
QueryLogic: MUSTNOT,
QueryType: TERMS,
},
},
}
fmt.Println(p.String())
}
Выход:
{
"bool": {
"must": [
{
"range": {
"submitTime": {
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis",
"gte": "2021-01-01T00:00:00+08:00",
"lte": "2021-10-31T23:59:59+08:00",
"boost": 1.0
}
}
},
{
"term": {
"user.keyword": {
"value": "wubin1989",
"boost": 1.0
}
}
},
{
"term": {
"phone.keyword": {
"value": "123456",
"boost": 1.0
}
}
},
{
"term": {
"district.keyword": {
"value": "Beijing",
"boost": 1.0
}
}
}
],
"must_not": [
{
"term": {
"score": {
"value": -1,
"boost": 1.0
}
}
}
]
}
}
go-doudou svc init
была расширена новым параметром -m
, который позволяет указывать имя модуля, например:go-doudou svc init github.com/unionj-cloud/rabida -m github.com/unionj-cloud/rabida
```6. В DSL-конструкторе SQL-запросов теперь поддерживаются псевдонимы таблиц, например:
```go
where := C().Col("cc.survey_id").Eq(Literal("abc")).And(
C().Col("cc.year").Eq(Literal(2021))).And(
C().Col("cc.month").Eq(Literal(10))).And(
C().Col("cc.stat_type").Eq(Literal(2)))
fmt.Println(where.Sql())
Результат:
(((cc.`survey_id` = 'abc' AND cc.`year` = '2021') AND cc.`month` = '10') AND cc.`stat_type` = '2')
Исправьте ошибку вывода неправильной версии при выполнении команды go-doudou -v
.
?name[]=jack&name[]=lucy
.Исправлено несколько ошибок.