根据 proto 生成 go文件 使用如下命令
命令:
protoc --go_out=. --go-grpc_out=. helloworld.proto
原因:
不知道从什么版本开始 生成的go文件也拆分为2个文件
所以 需要指定2个生成的路径
创建 server go文件 根据教程 创建客户端连接 grpc.WithInsecure() 方法弃用的问题
办法:
将 grpc.WithInsecure() 替换为 grpc.WithTransportCredentials(insecure.NewCredentials())
原因:
说是 grpc.WithInsecure() 不安全 使用 grpc.WithTransportCredentials(insecure.NewCredentials()) 用于配置连接的安全
proto.RegisterGreeterServer(g, &Server{}) 缺少某些方法
办法:
在 你声明的 Server结构体中 添加 proto.UnsafeGreeterServer
如一下内容
type Server struct {
proto.UnsafeGreeterServer
}
原因:
源代码中 新添加了一个方法mustEmbedUnimplementedGreeterServer
导致 方法缺失 所以需要 UnsafeGreeterServer 接口 这个接口申明了我们所需要 重构的方法(添加了这一方法 你甚至可以不需要写SayHello 也能够跑起来)
使用 protoc-gen_validate 生成go文件
命令:
protoc -I . -I C:\Users\86183\AppData\Local\JetBrains\GoLand2022.1\protoeditor --go_out=. --go-grpc_out=. --validate_out=“lang=go:.” helloworld.proto
原因:
这里 因为未知的问题 导致我2台电脑 上 google 相关的文件 下载到 GoLand文件里
proto文件又需要 google相关文件 导致查找不到
所以额外 添加了一个 绝对路径 如果没有这个问题 可以删除掉
(protoc-gen_validate文档中 生成命令也是坑人 还是用旧版的命令)
proto文件 import 同一个目录下 proto 显示错误 但是运行正常 (GoLand解析器 )下的问题
办法:
打开 goLand的 设置 语言和框架中 Protocol Buffers上
取消勾选 Configure automatically
添加 你想要import的文件所在的文件夹
原因:
GoLand识别不到 你想要improt的是那个文件 不知道查找的路径在哪里 没办法区分相对路径和绝对路径 这一点 和python没办法比