Using Protobuf in Golang

Source: Internet
Author: User
This is a creation in Article, where the information may have evolved or changed.

Installing GOPROTOBUF

1. get protobuf compiler Protoc from https://github.com/google/protobuf/releases( binary version available for download to Windows

wget Https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gztar ZXVF PROTOBUF-2.6.1.TAR.GZCD Protobuf-2.6.1./configuremakemake installprotoc-h

2. get Goprotobuf  Protobuf provided   compiler plug-in Protoc-gen-go should be added path  environment variable so that Protoc  can find Protoc-gen-go

This plugin is Protoc used to compile a . proto file is a Golang source file that can be used by this source file to define the messages in the . Proto file.

Go get github.com/golang/protobuf/protoc-gen-gocd Github.com/golang/protobuf/protoc-gen-gogo buildgo installvi/etc/ Profile add $gopath/bin to the environment variable source profile

3. get The support library provided by GOPROTOBUF, including functions such as encoding (marshaling), decoding (unmarshaling), etc.

Go get github.com/golang/protobuf/protocd github.com/golang/protobuf/protogo buildgo Install

Using Goprotobuf
Here is an example to illustrate usage. First create a. proto file Test.proto:

Package Example;enum FOO {X = 17;}; Message Test {Required String label = 1;optional Int32 type = 2 [default=77];repeated Int64 reps = 3;optional Group Option Algroup = 4 {Required String requiredfield = 5;}}


Compile this. proto file:

Protoc--go_out=. *.proto

The protobuf compiler plugin protoc-gen-go provided by GOPROTOBUF is used here through –go_out. At this point we will generate a source file named Test.pb.go.

Before using it, let's look at some of the available interfaces for each PROTOBUF message in Golang:

    1. Each PROTOBUF message corresponds to a golang struct

    2. Message that the domain name Word is camel_case in the corresponding Golang structure for CamelCase

    3. The setter method does not exist in the Golang struct that corresponds to the li>

      message, only the struct can be assigned directly, and some auxiliary functions may be used when assigning values, for example:

      msg. Foo = proto. A getter method exists in the Golang struct body of the String ("Hello") 
    4. Message that returns the value of the field and returns a default value if the field is not set to a value

    5. Message non-repeate The field of D is implemented as a pointer to nil when the field is not set in the

    6. Message repeated field is implemented as slice

    7. When accessing enumeration values, use the Format enumeration type name _ Enum name (more content can Read the generated source directly)

    8. uses Proto. Marshal  is encoded using Proto. The Unmarshal function decodes the


Now we're writing a small program:

package mainimport  (     "Log"     //  Auxiliary library       "Github.com/golang/protobuf/proto"     // test.pb.go  path       "Example") Func main ()  {    //  Create a message  Test     test := &example. test{        //  setting the value of a field using an auxiliary function          label: proto. String ("Hello"),         type:  proto. Int32 (+),         optionalgroup: &example. Test_optionalgroup{            requiredfield:  proto. String ("Good bye"),        },    }     //  encode the     data, err := proto. Marshal (tesT)     if err != nil {         Log. Fatal ("marshaling error: ",  err)     }    //  decode     newtest := &example. Test{}    err = proto. Unmarshal (data, newtest)     if err != nil {         log. Fatal ("unmarshaling error: ",  err)     }    //  test results     if test. Getlabel ()  != newtest.getlabel ()  {        log. Fatalf ("Data mismatch %q != %q",  test. Getlabel (),  newtest.getlabel ())     }}


Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.