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

2022-05-26 13:02:47
目录
引言1、安装protobuf编译器2、下载protobuf的golang支持库,安装protoc-gen-go3、protobuf使用示例

引言

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

本文使用的mac>

1、安装protobuf编译器

在>

本文使用的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 检查是否安装成功

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

    protoc-gen-go用来将 .proto 文件转换为>

    在终端运行命令:

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

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

    注意:原来的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>.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文件:

    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安装使用内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!