• mac下protobuf配置记录


    sudo vi /etc/profile
    加到文件底部

    export PATH=$PATH:$GOBIN:/usr/local/go/bin

    export GOPATH=/Users/jinfuzhang/go

    export GOBIN=/Users/jinfuzhang/go/bin

    export GO111MODULE=on

    export GOPROXY=https://goproxy.io

    按esc键,输入

    :wq!

    控制台执行

    source /etc/profile

    然后执行

    brew install protobuf
    go install github.com/golang/protobuf/{proto,protoc-gen-go}
    go install github.com/micro/protoc-gen-micro

    会根据GOPATH路径安装到下面的bin文件夹

    使用

    1. 创建 Demo golang工程

       
      Paste_Image.png
    2. 在 example 包中编写 person.proto

      syntax = "proto3";
      package example;
      
      message person {    //  aa 会生成 Aa 命名的结构体
          int32 id = 1;
          string name = 2;
      }
      
      message all_person {    //  aa_bb 会生成 AaBb 的驼峰命名的结构体
          repeated person Per = 1;
      }
      
    3. 进入 Demo 工程的 example 目录,使用 protoc 编译 person.proto

    $ protoc --go_out=. person.proto
    就会生成 person.pb.go 文件

    1. 在 golang 工程中使用 protobuf 进行序列化与反序列化
      main.go:
      package main
      
      import (
          "github.com/golang/protobuf/proto"
          "Demo/example"
          "log"
      )
      
      func main() {
          // 为 AllPerson 填充数据
          p1 := example.Person{
              Id:*proto.Int32(1),
              Name:*proto.String("xieyanke"),
          }
      
          p2 := example.Person{
              Id:2,
              Name:"gopher",
          }
      
          all_p := example.AllPerson{
              Per:[]*example.Person{&p1, &p2},
          }
      
          // 对数据进行序列化
          data, err := proto.Marshal(&all_p)  
          if err != nil {
              log.Fatalln("Mashal data error:", err)
          }
      
          // 对已经序列化的数据进行反序列化
          var target example.AllPerson
          err = proto.Unmarshal(data, &target)
          if err != nil{
              log.Fatalln("UnMashal data error:", err)
          }
      
          println(target.Per[0].Name) // 打印第一个 person Name 的值进行反序列化验证
      }
      
     
     
     
  • 相关阅读:
    【BZOJ3052】[wc2013]糖果公园 带修改的树上莫队
    【BZOJ4668】冷战 并查集
    HCNP学习笔记之史上最全华为路由器交换机配置命令大合集
    前端学习笔记之css清除浮动float的七种常用方法总结和兼容性处理
    前端学习笔记之CSS浮动浅析
    前端学习笔记之CSS文档流
    前端学习笔记之HTML/CSS 速写神器 Emmet
    js 基本类型与引用类型的存储
    Javascript何时执行
    Number使用笔记
  • 原文地址:https://www.cnblogs.com/zhangjinfu/p/11448038.html
Copyright © 2020-2023  润新知