mac golang grpc proto pb文件生成go文件.md

文章目录

    • 1.简介
    • 2.操作步骤
      • 1. 安装基础的protoc工具
        • 1. 下载
        • 2. 添加protoc到PATH
      • 3. 安装golang的支持
      • 4. 使用
        • 1. 普通编译
        • 2. import的路径
    • 参考

1.简介

  protobuf是google的一个数据编码格式,类似json一样,但是压缩率更好,表达的类型也更多,在rpc服务中使用的比较多。golang的grpc也是挺好玩的,基于http的rpc服务,可能还是为了更好的数据压缩?还是因为没有spring cloud这样强大的对http的封装?说到这里可以吐槽一下,这一份工作中开始用到了号称世界上最好的语言golang,老实说,能够吊打python, 但是和我最爱的java相比还是有很大的差距的,我要偷偷的喊一句java 是最好的编程语言了。
  golang基本上可以认为是偏向函数式编程的语言,语言的简洁性相对来说比java更简洁(简洁一般情况下也意味着信息的丢失,所以golang代码的可读性我觉得比java还是差一丢丢),这不是最重要的,只要不是python那种看代码全靠print的都还好。golang的最大的缺陷我认为在于没有对继承进行支撑,golang的设计理念应该是摒弃了继承,所有的都用组合来实现,在面向对象的编程中就会很难受,对象初始化的时候就需要手动初始化父类,如果是多重继承,真会让人哭的。还有就是没有切面支持,也没有注解支持,这两个特性在java程序中真的是非常优秀的特性,在座复杂的系统设计的时候想要做到灵活这两个特性非常好用,动态获取一些信息,而对于golang来说则只能采用硬编码了,做复杂系统设计的时候会很痛苦,只能使用策略模式手动维护了,很多时候能够应付的场景也很有限。看看golang的后期发展吧,目前只能说做做业务还是可以的。
  跑偏了,再来说说mac下如何使用protoc工具生成go文件吧。

2.操作步骤

1. 安装基础的protoc工具

1. 下载

cd ~/software/protobuf
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.12.0/protoc-3.12.0-osx-x86_64.zip
unzip  -xzf protoc-3.12.0-osx-x86_64.zip

2. 添加protoc到PATH

对应的readme文件中这样说

This package contains a precompiled binary version of the protocol buffer
compiler (protoc). This binary is intended for users who want to use Protocol
Buffers in languages other than C++ but do not want to compile protoc
themselves. To install, simply place this binary somewhere in your PATH.

If you intend to use the included well known types then don't forget to
copy the contents of the 'include' directory somewhere as well, for example
into '/usr/local/include/'.

也就是只要把bin/protoc这个二进制文件移动到path下面即可。

mv bin/protoc  /usr/local/protoc
# 这一步有多重操作方式,比如把路径加到PATH下面
#查看 protoc
protoc --version

3. 安装golang的支持

这个是google的支持,这个貌似是最快的,支持的也很好

go get github.com/gogo/protobuf/protoc-gen-gofast

也可以安装这个google的,但是后面的使用命令就不一样了

go install google.golang.org/protobuf/cmd/protoc-gen-go

4. 使用

1. 普通编译

protoc  --gofast_out=plugins=grpc:./mygo   mygo/service/ago/service/service.proto

protoc  --gofast_out=plugins=grpc:./ service.proto

这里的grpc:./mygo使用的是相对路径,默认后面pb的路径使用的也是相对路径,会在./mygo生成pb文件中指定的go_package目录,然后生成对应的go文件。

2. import的路径

如果有import,则是使用执行protoc 命令所在的路径作为import相对路径的起始位置

比如pb文件是这样

$pwd
/Users/chencc/work/git/mygo/service/call/talent

$cat talent.proto
import "call/base.proto";  这个import的文件的查找就是按照执行proto命令的位置进行查找
option go_package = "mygo/service/call/talent";  // 这个package会按照 gofast_out 参数的路径生成子目录



两个文件的路径分别是

/Users/chencc/work/git/mygo/service/call/talent/talent.proto
/Users/chencc/work/git/mygo/service/call/base.proto

其中talent.proto import 了base.proto

则执行proto命令的位置必须是/Users/chencc/work/git/mygo/service

执行的命令是

cd /Users/chencc/work/git/mygo/service/

protoc  --gofast_out=plugins=grpc:/Users/chencc/work/git/   call/talent/talent.proto

/Users/chencc/work/git/ 这个目录是 mygo项目的父级目录

参考

这个介绍的更好,可以参考这篇文章进行更加深入的学习
https://www.cnblogs.com/bergus/articles/protoc-gong-ju-cha-jian-he-sheng-tai.html

你可能感兴趣的:(golang初级,golang)