tee -a 是追加 1和2两步骤可以使用使用集成的命令: 查找并进入目录 终端输入protoc-,然后按下Tab键查看是否补全,补全即OK! tee -a 是追加 1和2两步骤可以使用使用集成的命令: 查找并进入目录 终端输入protoc-,然后按下Tab键查看是否补全,补全即OK! 内容如下: 1.标准格式 2.通用格式 将当前目录下【$GOPATH/src/goprotobuf/pb/】的所有的.proto文件编译成go文件,放在当前目录下【$GOPATH/src/goprotobuf/pb/】 编译完成后目录: 编译完成后的Student.pb.go文件 生成的【.pb.go】文件不允许编辑,如需要修改某些字段或者信息,则需要修改【.proto】文件然后重新编译生成即可。 1.在工程项目目录下创建main.go文件 2.编辑main.go 内容如下Protobuf-环境搭建-Golang
1.Ubuntu1804LTS
1.Golang环境搭建
1.安装工具
sudo apt install -y wget curl tar unzip tree 2.下载golang包
wget https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz && ls | grep go ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423154412713.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjM2NjM3OA==,size_16,color_FFFFFF,t_70)
3.解压到/usr/local/
sudo tar -zxvf go1.14.2.linux-amd64.tar.gz -C /usr/local ls /usr/local/ | grep go ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423154554182.png)
4.创建工作目录
mkdir -p ~/workspace/go/bin ~/workspace/go/src ~/workspace/go/pkg ~/workspace/go/src && tree ~/workspace/go/ ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423154640145.png)
5.设置环境变量
sudo tee -a /etc/profile <<-'EOF' export GOROOT=/usr/local/go export GOPATH=/home/wyf/workspace/go export GOBIN=/home/wyf/workspace/go/bin export GO111MODULE="on" export GOPROXY=https://goproxy.io export PATH=$PATH:$GOROOT/bin:$GOPATH/bin:$GOBIN:$GOPROXY EOF source /etc/profile ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423155154126.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjM2NjM3OA==,size_16,color_FFFFFF,t_70)
6.测试
go version go env ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423155214511.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjM2NjM3OA==,size_16,color_FFFFFF,t_70)
2.golang-protobuf
1.下载
go get -u -v github.com/golang/protobuf ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423171818688.png)
ls ~/workspace/go/pkg ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423171839100.png)
2.编译
1.查找protoc-gen-go
sudo find / -name "protoc-gen-go" ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423172048804.png)
2.进入目录
cd /home/wyf/workspace/go/pkg/mod/github.com/golang/protobuf@v1.4.0/protoc-gen-go && pwd cd `sudo find / -name "protoc-gen-go"` && pwd ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423172132884.png)
3.切换root
su root 4.执行build
/usr/local/go/bin/go build 5.确定编译完成
ls -la  ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423172720976.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjM2NjM3OA==,size_16,color_FFFFFF,t_70)
6.拷贝到/bin
cp protoc-gen-go /bin/ ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/2020042317281134.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjM2NjM3OA==,size_16,color_FFFFFF,t_70)
7.退出root
exit ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/2020042317285925.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjM2NjM3OA==,size_16,color_FFFFFF,t_70)
3.测试
protoc- ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423172922575.png)
2.CentOS-7
1.安装工具
sudo yum install -y wget curl tar unzip tree 2.下载golang包
wget https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz && ls | grep go ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423160347973.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjM2NjM3OA==,size_16,color_FFFFFF,t_70)
3.解压到/usr/local/
sudo tar -zxvf go1.14.2.linux-amd64.tar.gz -C /usr/local ls /usr/local/ | grep go ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423160434877.png)
4.创建工作目录
mkdir -p ~/workspace/go/bin ~/workspace/go/src ~/workspace/go/pkg ~/workspace/go/src && tree ~/workspace/go/ ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423160506182.png)
5.设置环境变量
sudo tee -a /etc/profile <<-'EOF' export GOROOT=/usr/local/go export GOPATH=/home/wyf/workspace/go export GOBIN=/home/wyf/workspace/go/bin export GO111MODULE="on" export GOPROXY=https://goproxy.io export PATH=$PATH:$GOROOT/bin:$GOPATH/bin:$GOBIN:$GOPROXY EOF source /etc/profile ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423160538356.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjM2NjM3OA==,size_16,color_FFFFFF,t_70)
6.测试
go version go env ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423160600503.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjM2NjM3OA==,size_16,color_FFFFFF,t_70)
2.golang-protobuf
1.下载
go get -u -v github.com/golang/protobuf ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423162555862.png)
ls ~/workspace/go/pkg ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423162707546.png)
2.编译
1.查找protoc-gen-go
sudo find / -name "protoc-gen-go" ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423163518998.png)
2.进入目录
cd /home/wyf/workspace/go/pkg/mod/github.com/golang/protobuf@v1.4.0/protoc-gen-go && pwd cd `sudo find / -name "protoc-gen-go"` && pwd 3.切换root
su root 4.执行build
go build  5.确定编译完成
ls -la  ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423170414979.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjM2NjM3OA==,size_16,color_FFFFFF,t_70)
6.拷贝到/bin
cp protoc-gen-go /bin/ 7.退出root
exit ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423170654934.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjM2NjM3OA==,size_16,color_FFFFFF,t_70)
3.测试
protoc- ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200423171219978.png)
3.测试
1.创建工程
mkdir -p $GOPATH/src/goprotobuf && cd $_ && pwd ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200424094122784.png)
2.go mod 初始化
go mod init goprotobuf ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200424094157735.png)
3.创建protobuf文件目录
mkdir -p $GOPATH/src/goprotobuf/pb && cd $_ && pwd ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200424094252675.png)
4.创建.proto文件
vim Student.proto syntax = "proto3"; //指定版本信息,不指定会报错  package pb;  // message为关键字,作用为定义一种消息类型 message Student{     string name = 1;// 序号1     int32 age = 2; // 序号2 } ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200424094438648.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjM2NjM3OA==,size_16,color_FFFFFF,t_70)
5.编译成go文件
protoc --proto_path=IMPORT_PATH --go_out=DST_DIR path/to/file.proto cd $GOPATH/src/goprotobuf/pb/ protoc --go_out=./ *.proto 
 ![Protobuf(二)[环境搭建-Golang]weixin42366378的博客-](https://img-blog.csdnimg.cn/20200424094633384.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjM2NjM3OA==,size_16,color_FFFFFF,t_70)
// Code generated by protoc-gen-go. DO NOT EDIT. // versions: //  protoc-gen-go v1.21.0 //  protoc        v3.11.4 // source: Student.proto package pb  import (  proto "github.com/golang/protobuf/proto"  protoreflect "google.golang.org/protobuf/reflect/protoreflect"  protoimpl "google.golang.org/protobuf/runtime/protoimpl"  reflect "reflect"  sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) // This is a compile-time assertion that a sufficiently up-to-date version // of the legacy proto package is being used. const _ = proto.ProtoPackageIsVersion4  // message为关键字,作用为定义一种消息类型 type Student struct {  state         protoimpl.MessageState  sizeCache     protoimpl.SizeCache  unknownFields protoimpl.UnknownFields   Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // 序号1  Age  int32 `protobuf:"varint,2,opt,name=age,proto3" json:"age,omitempty"` // 序号2 } func (x *Student) Reset() { *x = Student{} if protoimpl.UnsafeEnabled {   mi := &file_Student_proto_msgTypes[0]   ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))   ms.StoreMessageInfo(mi) } } func (x *Student) String() string { return protoimpl.X.MessageStringOf(x) } func (*Student) ProtoMessage() {} func (x *Student) ProtoReflect() protoreflect.Message {  mi := &file_Student_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil {   ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil {    ms.StoreMessageInfo(mi) } return ms  } return mi.MessageOf(x) } // Deprecated: Use Student.ProtoReflect.Descriptor instead. func (*Student) Descriptor() ([]byte, []int) { return file_Student_proto_rawDescGZIP(), []int{0} } func (x *Student) GetName() string { if x != nil { return x.Name  } return "" } func (x *Student) GetAge() int32 { if x != nil { return x.Age  } return 0 } var File_Student_proto protoreflect.FileDescriptor  var file_Student_proto_rawDesc = []byte{ 0x0a, 0x0d, 0x53, 0x74, 0x75, 0x64, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x22, 0x2f, 0x0a, 0x07, 0x53, 0x74, 0x75, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x61, 0x67, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var (  file_Student_proto_rawDescOnce sync.Once  file_Student_proto_rawDescData = file_Student_proto_rawDesc ) func file_Student_proto_rawDescGZIP() []byte {  file_Student_proto_rawDescOnce.Do(func() {   file_Student_proto_rawDescData = protoimpl.X.CompressGZIP(file_Student_proto_rawDescData) }) return file_Student_proto_rawDescData } var file_Student_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_Student_proto_goTypes = []interface{}{ (*Student)(nil), // 0: pb.Student } var file_Student_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name } func init() { file_Student_proto_init() } func file_Student_proto_init() { if File_Student_proto != nil { return } if !protoimpl.UnsafeEnabled {   file_Student_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Student); i { case 0: return &v.state    case 1: return &v.sizeCache    case 2: return &v.unknownFields    default: return nil } } } type x struct{}  out := protoimpl.TypeBuilder{   File: protoimpl.DescBuilder{    GoPackagePath: reflect.TypeOf(x{}).PkgPath(),    RawDescriptor: file_Student_proto_rawDesc,    NumEnums: 0,    NumMessages: 1,    NumExtensions: 0,    NumServices: 0, },   GoTypes:           file_Student_proto_goTypes,   DependencyIndexes: file_Student_proto_depIdxs,   MessageInfos:      file_Student_proto_msgTypes, }.Build()  File_Student_proto = out.File  file_Student_proto_rawDesc = nil  file_Student_proto_goTypes = nil  file_Student_proto_depIdxs = nil } 6.使用protobuf协议编程
cd $GOPATH/src/ && touch main.go vim main.go 
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算
官方软件产品操作指南 (170)