codecamp

Kratos 常见问题

在使用kratos proto命令时报google/protobuf/descriptor.proto: File not found.的错误

通常是因为您的protoc工具没有正确安装导致的。

请尽量采用包管理器方式进行安装,以确保安装的完整性。

如果您一定要自行下载zip包安装预编译的版本或自行编译安装,请参考zip包中readme.txt文件的说明进行操作,确保include下的所有东西(通常是google目录,里面是一系列.proto后缀的文件)都已经正确放置在您的include路径下,如/usr/local/include/目录中,以确保protoc在编译过程中能成功找到。

IDE中import "google/api/annotations.proto";等proto文件有错误提示(被画波浪线)

IDE中的这个提示不会影响项目的正常编译,如果您需要解决这个报错,请将项目中的thrid_party目录加入Protobuf的custom include paths下。

如何使用 goland 进行开发

在 goland 中,可以添加构建配置如下图


新版本发布后重新生成代码,发现无法运行,生成出来的代码有报错

可以尝试以下步骤

  1. kratos upgrade
  2. 修改 go.mod 中的 kratos 依赖版本
  3. go generate ./...

使用 kratos client . 后发现 http 没有被生成

  • 可以使用 make http
  • 可以 kratos proto client xxx -- --go-http_opt=omitempty=false

安装 kratos 工具后使用时终端提示 command not found: kratos

环境变量没有配置,可以把 GOBIN 目录配置到环境变量中即可,或者在 GOBIN 目录下使用 kratos 工具

proto 中引入了一些其他 proto 文件,生成代码时提示 not found

可以把缺失的文件放到项目的 third_party 中,或者定制 Makefile 将 proto 文件所在位置 添加到构建命令中

使用 validate 生成参数校验代码时,工具生成的代码全部都是 // no validation rules for xxxx 但是已经配置了 校验规则

  1. git clone github.com/envoyproxy/protoc-gen-validate
  2. cd protoc-gen-validate
  3. make build

如何控制 http 的返回值

可以覆盖默认的 DefaultResponseEncoder, 通过 http.ResponseEncoder() 配置,注入到 http.Server() 中


Kratos 设计理念
Kratos 项目结构
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Kratos 运维指南

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }