1. protobuf中使用import引用其他proto文件,生成后在go语言的go modules中import 包名报错问题。
public.proto文件
//protoc --go_out=plugins=grpc:. public.proto
syntax = "proto3";
package public;
option go_package = "self/game-service/msg/public";
message AwardItem {
int32 prop_id = 1;
int64 prop_num = 2;
}
third_s.proto 文件
syntax = "proto3";
package third;
import "public.proto";
option go_package = "self/game-service/m服务器托管sg/third";
message ThirdTakeCornucopiaBonusResp {
int32 code = 1;
string message = 2;
int32 take_cnt = 3;
int32 take_cnt_max = 4;
repeated public.AwardItem awards = 5;
}
生成后,指定的go_package 就是我们go 代码中import的包名:
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.33.0
// protoc v5.26.0
// source: third_s.proto
package third
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
public "self/game-service/msg/public"
sync "sync"
)
// 其他代码 .....
由于 import public “self/game-service/msg/public” 在我们代码里面是能正常识别的,所以改动go_package即可,改动后生成:
.protoc.exe –go_out=. –go-grpc_out=. *.proto
会在当前目录下生成:
./self/game-service/msg/public/public.pb.go
./self/game-service/msg/third_s/third_s.pb.go
然后拷贝生成后的文件到项目代码目录即可正常参加编译
xcopy .selfgame-servicemsg* ..game-servermsg /e /y /h /r /q
2. Windows安装构建golang protobuf + grpc 环境记录
1)下载pro服务器托管toc编译器。 直接上github.com下载,
https://github.com/protocolbuffers/protobuf/tags
下载后解压,拷贝到指定目录,或设置环境变量path指向protoc目录下bin
cmd命令行执行 protoc -v 查看版本,可以识别命令表示成功。
2)## 安装 protoc-gen-go 插件
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
3)## 安装 protoc-gen-go-grpc 插件
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
4)写一个proto文件测试。
protoc –go_out=. –go-grpc_out=. ./test.proto
5)安装完成后,应该会有两个文件(可执行文件exe)在环境变量GOPATH指向位置的bin/目录下
protoc-gen-go-grpc.exe
protoc-gen-go.exe
如果没有需要去对应目录执行
go install .
如,我没有protoc-gen-go-grpc.exe,于是切换目录到
C:UsersAdministratorgopkgmodgoogle.golang.orggrpccmdprotoc-gen-go-grpc@v1.3.0
在此目录打开cmd命令行,执行 go install .
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
双向链表: func函数: #include #include #include “./double.h” //创建一个空的双向链表 doubleLinkList* create_doubleLinkList() { doubleLinkList* head …