脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - Goland中Protobuf的安装、配置和使用

Goland中Protobuf的安装、配置和使用

2022-10-11 12:16starine Golang

本文记录了mac环境下protobuf的编译安装,并通过一个示例来演示proto自动生成go代码,本文使用的mac os 12.3系统,不建议使用homebrew安装,系统版本太高,会安装报错,所以自己下载新版压缩包编译构建安装

引言

本文记录了mac环境下protobuf的编译安装,并通过一个示例来演示proto自动生成go代码。

本文使用的mac os 12.3系统,不建议使用homebrew安装,系统版本太高,会安装报错,所以自己下载新版压缩包编译构建安装。

1、安装protobuf编译器

在 官方github 选择适合自己系统的Proto编译器程序进行下载安装

本文使用的mac os 12.3系统,不建议使用homebrew安装,系统版本太高,会报错,所以自己下载压缩包构建安装。

  • 下载地址:链接: https://pan.baidu.com/s/1NIMErRKrP3-DNmvA8SgKxg  提取码: 27av 

如需压缩包请在评论区留言。

2.在/usr/local/下新建文件夹protobuf

3.将下载文件拷贝到:/usr/local/protobuf/

4.配置环境变量:

vim ~/.bash_profile

增加:

# protobuf
export PROTOBUF=/usr/local/protobuf
export PATH=$PROTOBUF/bin:$PATH

使环境变量生效:

source ~/.bash_profile

解压:

tar zxvf protobuf-all-3.20.1.tar.gz

cd 进入 protobuf-3.20.1/目录下,在终端按顺序执行:

sudo ./configure
sudo make
sudo make check
sudo make install

执行命令:protoc --version 检查是否安装成功

Goland中Protobuf的安装、配置和使用

 

2、下载protobuf的golang支持库. 安装protoc-gen-go

protoc-gen-go用来将.proto文件转换为 Golang 代码。

在终端运行命令:

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

这条命令会安装,并将protoc-gen-go可执行文件复制到$GOBIN文件夹下

Goland中Protobuf的安装、配置和使用

注意:原来的github.com/golang/protobuf/protoc-gen-go这个库已经被弃用,我们需要使用 google.golang.org/protobuf 这个库

% go get -u github.com/golang/protobuf/protoc-gen-go
go: module github.com/golang/protobuf is deprecated: Use the "google.golang.org/protobuf" module instead.
go: added github.com/golang/protobuf v1.5.2
go: added google.golang.org/protobuf v1.28.0

 

3、protobuf使用示例

1、新建一个go moudle项目,创建扩展名为.proto的文件,并编写代码。比如创建idl/user.proto文件,内容如下:

syntax = "proto3";
package user;
option go_package ="./user";
message User {
int64 user_id = 1;
string user_name = 2;
string password = 3;
}

2、编译.proto文件,生成Go语言文件。执行如下命令:

protoc --go_out=. ./idl/*.proto

将会自动生成对应的user目录,存放生成的user.pb.go文件:

Goland中Protobuf的安装、配置和使用

3、在main程序中使用Protobuf生成的代码:

使用proto将user序列化输出out,在将out反序列化成user

package main
import (
 "encoding/json"
 "fmt"
 "github.com/starine/go-protoc-example/user"
 "google.golang.org/protobuf/proto"
 "log"
)
func main() {
 fmt.Println("Hello World. \n")
 user1 := user.User{}
 user1.Password = "123456"
 user1.UserName = "starine"
 bytes, _ := json.Marshal(user1)
 fmt.Println(string(bytes))
 //序列化user结构体数据
 out, err := proto.Marshal(&user1)
 if err != nil {
    log.Fatalln("Failed to encode User:", err)
 }
 fmt.Println(out)
 //反序列化user结构体
 user2 := user.User{}
 err = proto.Unmarshal(out, &user2)
 if err!=nil {
    log.Fatalln("Failed to parse User:", err)
 }
 bytes, _ = json.Marshal(user2)
 fmt.Println(string(bytes))
}

运行结果:

% go run main.go
Hello World.

{"user_name":"starine","password":"123456"}
[18 7 115 116 97 114 105 110 101 26 6 49 50 51 52 53 54]
{"user_name":"starine","password":"123456"}

Process finished with the exit code 0

到此这篇关于Goland中Protobuf的安装、配置和使用的文章就介绍到这了,更多相关Protobuf安装使用内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://juejin.cn/post/7101304169524527140

延伸 · 阅读

精彩推荐
  • Golang使用go实现常见的数据结构

    使用go实现常见的数据结构

    这篇文章主要介绍了使用go实现常见的数据结构,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    x1aoda14192021-03-31
  • Golang利用Go Plugin实现插件化编程的简单方法

    利用Go Plugin实现插件化编程的简单方法

    Golang官方提供了plugin模块,该模块可以支持插件开,下面这篇文章主要给大家介绍了关于如何利用Go Plugin实现插件化编程的相关资料,需要的朋友可以参考下...

    JWang12022021-11-26
  • GolangGolang 实现分片读取http超大文件流和并发控制

    Golang 实现分片读取http超大文件流和并发控制

    这篇文章主要介绍了Golang 实现分片读取http超大文件流和并发控制,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    Hello_Ray7922021-03-07
  • Golang详解Golang五种原子性操作的用法

    详解Golang五种原子性操作的用法

    本文主要介绍了详解Golang五种原子性操作的用法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    kevinyan5392021-11-14
  • GolangGolang实现断点续传功能

    Golang实现断点续传功能

    这篇文章主要为大家详细介绍了Golang实现断点续传、复制文件功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    开心码农1号6182022-07-26
  • GolangGo语言基础if条件语句用法及示例详解

    Go语言基础if条件语句用法及示例详解

    这篇文章主要为大家介绍了Go语言基础if条件语句的用法及示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪...

    枫少文4742021-12-07
  • Golang在golang中使用Sync.WaitGroup解决等待的问题

    在golang中使用Sync.WaitGroup解决等待的问题

    这篇文章主要介绍了在golang中使用Sync.WaitGroup解决等待的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    七八月份的太阳5302021-06-02
  • GolangGolang继承模拟实例详解

    Golang继承模拟实例详解

    这篇文章主要介绍了Golang继承模拟方法,结合实例形式分析了Go语言实现继承的原理与相关操作技巧,需要的朋友可以参考下 ...

    轩脉刃4192020-04-30