rpc服务目录

  1. .
  2. ├── etc // yaml配置文件
  3. └── greet.yaml
  4. ├── go.mod
  5. ├── greet // pb.go文件夹①
  6. └── greet.pb.go
  7. ├── greet.go // main函数
  8. ├── greet.proto // proto 文件
  9. ├── greetclient // call logic ②
  10. └── greet.go
  11. └── internal
  12. ├── config // yaml配置对应的实体
  13. └── config.go
  14. ├── logic // 业务代码
  15. └── pinglogic.go
  16. ├── server // rpc server
  17. └── greetserver.go
  18. └── svc // 依赖资源
  19. └── servicecontext.go

[!TIP] ① pb文件夹名(老版本文件夹固定为pb)称取自于proto文件中option go_package的值最后一层级按照一定格式进行转换,若无此声明,则取自于package的值,大致代码如下:

  1. if option.Name == "go_package" {
  2. ret.GoPackage = option.Constant.Source
  3. }
  4. ...
  5. if len(ret.GoPackage) == 0 {
  6. ret.GoPackage = ret.Package.Name
  7. }
  8. ret.PbPackage = GoSanitized(filepath.Base(ret.GoPackage))
  9. ...

[!TIP] GoSanitized方法请参考google.golang.org/protobuf@v1.25.0/internal/strs/strings.go:71

[!TIP] ② call 层文件夹名称取自于proto中service的名称,如该sercice的名称和pb文件夹名称相等,则会在srervice后面补充client进行区分,使pb和call分隔。

  1. if strings.ToLower(proto.Service.Name) == strings.ToLower(proto.GoPackage) {
  2. callDir = filepath.Join(ctx.WorkDir, strings.ToLower(stringx.From(proto.Service.Name+"_client").ToCamel()))
  3. }