个人备忘录:尝试使用Protocol Buffers3_golang

用Golang调用我写的Protobuf文件看看

文件夹结构。

prootbuf测试
|– go\
|  – protoTest.go
|– protobuf\
|  – Student.proto

创建用于Golang的protobuf文件

生成protobuf
②创建protobuf
③制作protobuf

切换至\protobuf目录下,文件名为Student.proto。

syntax ="proto3";

message Student {
    string name = 1;
    int32 age = 2;
}

编译并生成Student.pb.go文件。

protoc –go_out=./ Student.proto

请使用 protoc –go_out=./ Student.proto 命令。

创建一个适用于 protobuf 的 Golang 程序。

切换至上层目录下的”go”文件夹。文件名:protoTest.go。

package main

import (
    "練習/protobuf"
    "fmt"
    "github.com/golang/protobuf/proto"
)

func main() {
    text := &Student.Student{
        Name:    "protobufTest",
        Age:20,
    }

    fmt.Println("Student情報:",text)
    // proto Marshal
    data, err := proto.Marshal(text)
    if err != nil {
        return
    }

    fmt.Println("proto Marshal後:",data)

    Stu01 := &Student.Student{}

    //  proto Unmarshal
    err = proto.Unmarshal(data, Stu01)
    if err != nil {
        return
    }
    fmt.Println("proto Unmarshal後:",Stu01)
    fmt.Println("Unmarshal後の名前取得:",Stu01.Name)
    fmt.Println("GetNameでの名前取得:",Stu01.GetName())
}

执行结果

Student情報: name:"protobufTest" age:20 
proto Marshal後: [10 12 112 114 111 116 111 98 117 102 84 101 115 116 16 20]
proto Unmarshal後: name:"protobufTest" age:20 
Unmarshal後の名前取得: protobufTest
GetNameでの名前取得: protobufTest

Process finished with exit code 0
广告
将在 10 秒后关闭
bannerAds