• 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 的值进行反序列化验证
      }
      
     
     
     
  • 相关阅读:
    [转]IOS下如何判断机器是否越狱
    [转]php rsa加密解密实例
    『TensorFlow × MXNet』SSD项目复现经验
    『TensorFlow』正则化添加方法整理
    『流畅的Python』第10章笔记_序列类型
    『MXNet』im2rec脚本使用以及数据读取
    『TensorFlow』SSD源码学习_其八:网络训练
    『TensorFlow』SSD源码学习_其七:损失函数
    『TensorFlow』SSD源码学习_其六:标签整理
    『TensorFlow』SSD源码学习_其五:TFR数据读取&数据预处理
  • 原文地址:https://www.cnblogs.com/zhangjinfu/p/11448038.html
Copyright © 2020-2023  润新知