Goland proto文件 File Watch 自动生成

使用的是Kratos的项目模板生成的项目,目录结构如下:
在这里插入图片描述每次编写完Proto文件都要手动输入命令来生成go文件,使用Goland的File Watch监听文件改变,然后执行生成命令。

需要有File Watch这个插件
FileWatch
配置:
配置FileWatch
直接把命令行的参数替换成变量就行了。
生成使用的工具是protoc.exe

生成Proto
*.pb.go是生成的接口代码
*_grpc.pb.go是grpc服务端接口

生成*.pb.go的目录为proto文件的option go_package = “post/internal/conf;conf”;
生成选项:proto路径(包括引用的package路径),使用–proto_path或-I命令行标志指定;
输出路径,使用–go_out指定*.pb.go(会跟上面的option go_package一起使用)、–go-grpc_out指定*_grpc.pb.go

生成proto源码:
kratos proto client api/post/v1/post.proto =>生成 *_grpc.pb.go、*.pb.go

项目目录下运行: protoc --go_out=.. --go-grpc_out=.\api\server\v1 --go-grpc_opt=paths=source_relative -I=".\third_party" -I=".\third_party\google" -I=".\api\server\v1" HatService.proto =>生成 _grpc.pb.go、.pb.go

--go_out=$ProjectFileDir$\..
--go-grpc_out=$FileDir$
--go-grpc_opt=paths=source_relative
-I="$ProjectFileDir$\third_party"
-I="$ProjectFileDir$\third_party\google"
-I="$ProjectFileDir$\api\server\v1"
$FilePath$

$ProjectFileDir$ 是项目的目录
$FilePath$ 是监控到变更文件的路径
-I参数是添加包proto文件依赖

show console可以改为always来查看日志。
保存配置后每次修改都会自动生成go文件

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
安装protobuf 1. 下载protobuf编译器:https://github.com/protocolbuffers/protobuf/releases 2. 安装protobuf编译器: ``` $ tar -xzvf protobuf-3.15.6.tar.gz $ cd protobuf-3.15.6/ $ ./configure $ make $ sudo make install $ sudo ldconfig ``` 3. 安装protobuf的Go语言支持: ``` $ go get github.com/golang/protobuf/protoc-gen-go ``` 该命令会从GitHub上下载并编译出protoc-gen-go可执行文件,该文件是一个protobuf插件,用于将proto文件生成Go语言代码。 使用protobuf 1. 编写proto文件 ```protobuf syntax = "proto3"; package example; message Person { string name = 1; int32 age = 2; repeated string hobbies = 3; } ``` 2. 使用protoc命令生成Go语言代码 ``` $ protoc --go_out=. example.proto ``` 该命令会在当前目录下生成example.pb.go文件,其中包含了protobuf定义的Person类型的Go语言结构体。 3. 在Go语言程序中使用protobuf ```go package main import ( "fmt" "example" "github.com/golang/protobuf/proto" ) func main() { p := &example.Person{ Name: "Alice", Age: 20, Hobbies: []string{"swimming", "reading"}, } data, err := proto.Marshal(p) if err != nil { fmt.Println("marshal error:", err) return } p2 := &example.Person{} err = proto.Unmarshal(data, p2) if err != nil { fmt.Println("unmarshal error:", err) return } fmt.Println("p2:", p2) } ``` 该程序使用protobuf将一个Person对象编码为二进制数据,然后解码成另一个Person对象。注意,该程序需要引入github.com/golang/protobuf/proto包,该包提供了protobuf的Go语言支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nickdlk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值