美文网首页
简单例子跑通

简单例子跑通

作者: wncbbnk | 来源:发表于2018-05-10 14:12 被阅读0次

    https://github.com/google/protobuf/blob/master/src/README.md
    https://studygolang.com/articles/7394

    $ git clone https://github.com/google/protobuf.git
    $ cd protobuf
    $ git submodule update --init --recursive
    $ ./autogen.sh
    
    $ ./configure
    $ make
    $ make check
    $ sudo make install
    $ sudo ldconfig # refresh shared library cache.
    
    go get github.com/golang/protobuf
    go get github.com/golang/protobuf/protoc-gen-go
    
    cat test.proto
    
    syntax="proto2";
    package example;
    
    enum FOO { X = 17; };
    
    message Test {
    required string label = 1;
    optional int32 type = 2 [default=77];
    repeated int64 reps = 3;
    optional group OptionalGroup = 4 {
    required string RequiredField = 5;
    }
    }
    
    protoc --go_out=. test.proto
    #产生的文件放到$GOPATH中便于引用,这里扔到my.protobuf.test/example
    
    cat test.go
    
    package main
    
    import (
        "fmt"
        "log"
        // 辅助库
        "github.com/golang/protobuf/proto"
    
        // test.pb.go 的路径
        "my.protobuf.test/example"
    )
    
    func main() {
        // 创建一个消息 Test
        test := &example.Test{
            // 使用辅助函数设置域的值
            Label: proto.String("hello"),
            Type:  proto.Int32(17),
            Optionalgroup: &example.Test_OptionalGroup{
                RequiredField: proto.String("good bye"),
            },
        }
    
        fmt.Printf("Label:%s Type:%d\n", test.GetLabel(), test.GetType())
    
        *(test.Label) = "hello go"
        *(test.Type) = 18
    
        // 进行编码
        data, err := proto.Marshal(test)
        if err != nil {
            log.Fatal("marshaling error: ", err)
        }
    
        fmt.Printf("Binary Len:%d\n", len(data))
    
        // 进行解码
        newTest := &example.Test{}
        err = proto.Unmarshal(data, newTest)
        if err != nil {
            log.Fatal("unmarshaling error: ", err)
        }
    
        fmt.Printf("Label:%s Type:%d\n", test.GetLabel(), test.GetType())
    
        // 测试结果
        if test.GetLabel() != newTest.GetLabel() {
            log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel())
        }
    }
    
    

    相关文章

      网友评论

          本文标题:简单例子跑通

          本文链接:https://www.haomeiwen.com/subject/morvhftx.html