cloudwego / hertz

Go HTTP framework with high-performance and strong-extensibility for building micro-services.
https://www.cloudwego.io
Apache License 2.0
5.23k stars 509 forks source link

hz基于protobuf idl文件生成的项目框架中同一package中类名不一致 #587

Closed sklfszjs closed 1 year ago

sklfszjs commented 1 year ago

Describe the Question

hz命令行工具通过protobuf idl文件生成的项目框架handler文件夹与model文件夹中同一package使用的类名不一致.

Reproducible Code

生成项目所用idl文件(core.proto):

syntax = "proto2"; import "api.proto";

package douyin.core; message douyin_user_request { required int64 user_id = 1; // 用户id required string token = 2; // 用户鉴权token }

message douyin_user_response { required int32 status_code = 1; // 状态码,0-成功,其他值-失败 optional string status_msg = 2; // 返回状态描述 required User user = 3; // 用户信息 }

message User { required int64 id = 1; // 用户id required string name = 2; // 用户名称 optional int64 follow_count = 3; // 关注总数 optional int64 follower_count = 4; // 粉丝总数 required bool is_follow = 5; // true-已关注,false-未关注 }

service UserService { rpc CreateUserResponse(douyin_user_request) returns(douyin_user_response) { option (api.get) = "/douyin/user/"; } }

生成指令: hertz new -idl core.proto 随后运行: go mod tidy 最后运行: go build 报错: 图片

打开报错的文件: 图片 文件中使用了douyin_core._user_request 以及 douyin_core._user_response类型,但是打开biz/model/douyin_core/core.pb.go后发现这里定义的结构体名为DouyinUserRequest 与 DouyinUserResponse,即基于同一个protobuf文件,在model文件夹中生成的结构体名称与handler中调用的结构体名称不一致。

图片 图片

Hertz version:

hz version v0.5.1

Environment:

go env: GO111MODULE="on" GOARCH="amd64" GOBIN="" GOCACHE="/home/ubuntu/.cache/go-build" GOENV="/home/ubuntu/.config/go/env" GOEXE="" GOEXPERIMENT="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOINSECURE="" GOMODCACHE="/home/ubuntu/go/pkg/mod" GONOPROXY="" GONOSUMDB="" GOOS="linux" GOPATH="/home/ubuntu/go" GOPRIVATE="" GOPROXY="https://goproxy.cn" GOROOT="/usr/lib/go-1.18" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/usr/lib/go-1.18/pkg/tool/linux_amd64" GOVCS="" GOVERSION="go1.18.1" GCCGO="gccgo" GOAMD64="v1" AR="ar" CC="gcc" CXX="g++" CGO_ENABLED="1" GOMOD="/home/ubuntu/go/src/github.com/test_proto/go.mod" GOWORK="" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build3284544361=/tmp/go-build -gno-record-gcc-switches"

li-jin-gou commented 1 year ago

refer to https://github.com/cloudwego/hertz/pull/586/files

FGYFFFF commented 1 year ago

We have fixed this issue, you can manually reference the correct struct name~~~

FGYFFFF commented 1 year ago

We has fix the issue~ Please try it: go install github.com/cloudwego/hertz/cmd/hz@develop