本文整理汇总了Golang中github.com/gogo/protobuf/proto.Marshal函数的典型用法代码示例。如果您正苦于以下问题:Golang Marshal函数的具体用法?Golang Marshal怎么用?Golang Marshal使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Marshal函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: TestRepeatedExtensionsFieldsIssue161
func TestRepeatedExtensionsFieldsIssue161(t *testing.T) {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
rep := 10
ints := make([]int64, rep)
for i := range ints {
ints[i] = r.Int63()
}
input := &MyExtendable{}
if err := proto.SetExtension(input, E_FieldD, ints); err != nil {
t.Fatal(err)
}
data, err := proto.Marshal(input)
if err != nil {
t.Fatal(err)
}
output := &MyExtendable{}
if err := proto.Unmarshal(data, output); err != nil {
t.Fatal(err)
}
if !input.Equal(output) {
t.Fatal("expected equal")
}
data2, err2 := proto.Marshal(output)
if err2 != nil {
t.Fatal(err2)
}
if len(data) != len(data2) {
t.Fatal("expected equal length buffers")
}
}
开发者ID:fd,项目名称:protobuf,代码行数:30,代码来源:bug_test.go
示例2: TestNoMergeExtensionMerge
func TestNoMergeExtensionMerge(t *testing.T) {
bigm := prototests.AContainer
m := &prototests.Small{SmallField: proto.Int64(1)}
data, err := proto.Marshal(bigm)
if err != nil {
panic(err)
}
mdata, err := proto.Marshal(m)
if err != nil {
panic(err)
}
key := uint32(101)<<3 | uint32(2)
datakey := make([]byte, 10)
n := binary.PutUvarint(datakey, uint64(key))
datakey = datakey[:n]
datalen := make([]byte, 10)
n = binary.PutUvarint(datalen, uint64(len(mdata)))
datalen = datalen[:n]
data = append(data, append(datakey, append(datalen, mdata...)...)...)
err = noMerge(data, bigm.Description(), "prototests", "Container")
if err == nil || !strings.Contains(err.Error(), "FieldB requires merging") {
t.Fatalf("FieldB should require merging, but error is %v", err)
}
t.Log(err)
}
开发者ID:katydid,项目名称:katydid,代码行数:25,代码来源:nomerge_test.go
示例3: TestNoMergeExtensionMerge
func TestNoMergeExtensionMerge(t *testing.T) {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
bigm := test.NewPopulatedMyExtendable(r, true)
m := test.NewPopulatedNinOptNative(r, true)
err := proto.SetExtension(bigm, test.E_FieldB, m)
if err != nil {
panic(err)
}
data, err := proto.Marshal(bigm)
if err != nil {
panic(err)
}
key := uint32(101)<<3 | uint32(2)
data2 := make([]byte, 10)
n := binary.PutUvarint(data2, uint64(key))
data2 = data2[:n]
data = append(data, data2...)
data4, err := proto.Marshal(test.NewPopulatedNinOptNative(r, true))
if err != nil {
panic(err)
}
data3 := make([]byte, 10)
n = binary.PutUvarint(data3, uint64(len(data4)))
data3 = data3[:n]
data = append(data, data3...)
data = append(data, data4...)
err = fieldpath.NoMerge(data, test.ThetestDescription(), "test", "MyExtendable")
if err == nil || !strings.Contains(err.Error(), "requires merging") {
t.Fatalf("should require merging")
}
}
开发者ID:nolenroyalty,项目名称:bangarang,代码行数:31,代码来源:merge_test.go
示例4: WriteMsg
func (this *uint32Writer) WriteMsg(msg proto.Message) (err error) {
var data []byte
if m, ok := msg.(marshaler); ok {
n, ok := getSize(m)
if !ok {
data, err = proto.Marshal(msg)
if err != nil {
return err
}
}
if n >= len(this.buffer) {
this.buffer = make([]byte, n)
}
_, err = m.MarshalTo(this.buffer)
if err != nil {
return err
}
data = this.buffer[:n]
} else {
data, err = proto.Marshal(msg)
if err != nil {
return err
}
}
length := uint32(len(data))
if err := binary.Write(this.w, this.byteOrder, &length); err != nil {
return err
}
_, err = this.w.Write(data)
return err
}
开发者ID:rhuss,项目名称:gofabric8,代码行数:31,代码来源:uint32.go
示例5: TestOldUnoM
func TestOldUnoM(t *testing.T) {
popr := math_rand.New(math_rand.NewSource(time.Now().UnixNano()))
older := NewPopulatedOldUnoM(popr, true)
// need optional field to be always initialized, to check it's lost in this test
older.Field1 = proto.String(randStringUnrecognized(popr))
data1, err := proto.Marshal(older)
if err != nil {
panic(err)
}
newer := &UnoM{}
if err = proto.Unmarshal(data1, newer); err != nil {
panic(err)
}
data2, err := proto.Marshal(newer)
if err != nil {
panic(err)
}
older2 := &OldUnoM{}
if err := proto.Unmarshal(data2, older2); err != nil {
panic(err)
}
// check that Field1 is lost
if older2.Field1 != nil {
t.Fatalf("field must be lost, but it's not, older: %#v, older2: %#v", older, older2)
}
// now restore Field1 and messages should be equal now
older2.Field1 = older.Field1
if err := older.VerboseEqual(older2); err != nil {
t.Fatalf("%#v !VerboseProto %#v, since %v", older, older2, err)
}
}
开发者ID:fd,项目名称:protobuf,代码行数:35,代码来源:oldnew_test.go
示例6: makeCompoundMessage
// makeCompoundMessage takes a list of messages and generates
// a single compound message containing all of them
func makeCompoundMessage(msgs [][]byte) []byte {
cMsg := CompoundMessage{}
cMsg.Messages = make([]*CompoundMessage_SimpleMessage, 0, len(msgs))
for _, m := range msgs {
cMsg.Messages = append(cMsg.Messages, &CompoundMessage_SimpleMessage{
Payload: m,
})
}
buf, err := proto.Marshal(&cMsg)
if err != nil {
return nil
}
gMsg := GossipMessage{
Type: MessageTypeCompound,
Data: buf,
}
buf, err = proto.Marshal(&gMsg)
if err != nil {
return nil
}
return buf
}
开发者ID:CadeLaRen,项目名称:docker-3,代码行数:29,代码来源:message.go
示例7: EmitLogMessage
func (e *LoggregatorEmitter) EmitLogMessage(logMessage *logmessage.LogMessage) {
messages := splitMessage(string(logMessage.GetMessage()))
for _, message := range messages {
if isEmpty(message) {
continue
}
if len(message) > MAX_MESSAGE_BYTE_SIZE {
logMessage.Message = append([]byte(message)[0:TRUNCATED_OFFSET], TRUNCATED_BYTES...)
} else {
logMessage.Message = []byte(message)
}
if e.sharedSecret == "" {
marshalledLogMessage, err := proto.Marshal(logMessage)
if err != nil {
e.logger.Errorf("Error marshalling message: %s", err)
return
}
e.LoggregatorClient.Send(marshalledLogMessage)
} else {
logEnvelope, err := e.newLogEnvelope(*logMessage.AppId, logMessage)
if err != nil {
e.logger.Errorf("Error creating envelope: %s", err)
return
}
marshalledLogEnvelope, err := proto.Marshal(logEnvelope)
if err != nil {
e.logger.Errorf("Error marshalling envelope: %s", err)
return
}
e.LoggregatorClient.Send(marshalledLogEnvelope)
}
}
}
开发者ID:pkdevbox,项目名称:loggregatorlib,代码行数:35,代码来源:emit.go
示例8: WriteMsg
func (this *fullWriter) WriteMsg(msg proto.Message) (err error) {
var data []byte
if m, ok := msg.(marshaler); ok {
n, ok := getSize(m)
if !ok {
data, err = proto.Marshal(msg)
if err != nil {
return err
}
}
if n >= len(this.buffer) {
this.buffer = make([]byte, n)
}
_, err = m.MarshalTo(this.buffer)
if err != nil {
return err
}
data = this.buffer[:n]
} else {
data, err = proto.Marshal(msg)
if err != nil {
return err
}
}
_, err = this.w.Write(data)
return err
}
开发者ID:otsimo,项目名称:otsimoctl,代码行数:27,代码来源:full.go
示例9: WriteMsg
func (this *varintWriter) WriteMsg(msg proto.Message) (err error) {
var data []byte
if m, ok := msg.(marshaler); ok {
n, ok := getSize(m)
if !ok {
data, err = proto.Marshal(msg)
if err != nil {
return err
}
}
if n >= len(this.buffer) {
this.buffer = make([]byte, n)
}
_, err = m.MarshalTo(this.buffer)
if err != nil {
return err
}
data = this.buffer[:n]
} else {
data, err = proto.Marshal(msg)
if err != nil {
return err
}
}
length := uint64(len(data))
n := binary.PutUvarint(this.lenBuf, length)
_, err = this.w.Write(this.lenBuf[:n])
if err != nil {
return err
}
_, err = this.w.Write(data)
return err
}
开发者ID:otsimo,项目名称:otsimoctl,代码行数:33,代码来源:varint.go
示例10: TestRepeatedExtensionsMsgsIssue161
func TestRepeatedExtensionsMsgsIssue161(t *testing.T) {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
rep := 10
nins := make([]*NinOptNative, rep)
for i := range nins {
nins[i] = NewPopulatedNinOptNative(r, true)
}
input := &MyExtendable{}
if err := proto.SetExtension(input, E_FieldE, nins); err != nil {
t.Fatal(err)
}
data, err := proto.Marshal(input)
if err != nil {
t.Fatal(err)
}
output := &MyExtendable{}
if err := proto.Unmarshal(data, output); err != nil {
t.Fatal(err)
}
if !input.Equal(output) {
t.Fatal("expected equal")
}
data2, err2 := proto.Marshal(output)
if err2 != nil {
t.Fatal(err2)
}
if len(data) != len(data2) {
t.Fatal("expected equal length buffers")
}
}
开发者ID:fd,项目名称:protobuf,代码行数:30,代码来源:bug_test.go
示例11: Create
func (o *OortFS) Create(ctx context.Context, parent, id []byte, inode uint64, name string, attr *pb.Attr, isdir bool) (string, *pb.Attr, error) {
// Check to see if the name already exists
b, err := o.comms.ReadGroupItem(ctx, parent, []byte(name))
if err != nil && !store.IsNotFound(err) {
// TODO: Needs beter error handling
return "", &pb.Attr{}, err
}
p := &pb.DirEntry{}
err = proto.Unmarshal(b, p)
if err != nil {
return "", &pb.Attr{}, err
}
// Return an error if entry already exists and is not a tombstone
if len(b) > 0 && p.Tombstone == nil {
return "", &pb.Attr{}, nil
}
var direntType fuse.DirentType
if isdir {
direntType = fuse.DT_Dir
} else {
direntType = fuse.DT_File
}
// Add the name to the group
d := &pb.DirEntry{
Version: DirEntryVersion,
Name: name,
Id: id,
Type: uint32(direntType),
}
b, err = proto.Marshal(d)
if err != nil {
return "", &pb.Attr{}, err
}
err = o.comms.WriteGroup(ctx, parent, []byte(name), b)
if err != nil {
return "", &pb.Attr{}, err
}
// Add the inode entry
n := &pb.InodeEntry{
Version: InodeEntryVersion,
Inode: inode,
IsDir: isdir,
Attr: attr,
Blocks: 0,
}
b, err = proto.Marshal(n)
if err != nil {
return "", &pb.Attr{}, err
}
err = o.WriteChunk(ctx, id, b)
if err != nil {
return "", &pb.Attr{}, err
}
return name, attr, nil
}
开发者ID:getcfs,项目名称:cfs-binary-release,代码行数:55,代码来源:file.go
示例12: Create
func (o *OortFS) Create(ctx context.Context, parent, id []byte, inode uint64, name string, attr *pb.Attr, isdir bool) (string, *pb.Attr, error) {
v, err := o.validateIP(ctx)
if err != nil {
return "", nil, err
}
if !v {
return "", nil, errors.New("Unknown or unauthorized FS use")
}
// Check to see if the name already exists
b, err := o.comms.ReadGroupItem(ctx, parent, []byte(name))
if err != nil && !store.IsNotFound(err) {
// TODO: Needs beter error handling
return "", &pb.Attr{}, err
}
if len(b) > 0 {
return "", &pb.Attr{}, nil
}
p := &pb.DirEntry{}
err = proto.Unmarshal(b, p)
if err != nil {
return "", &pb.Attr{}, err
}
// Add the name to the group
d := &pb.DirEntry{
Version: DirEntryVersion,
Name: name,
Id: id,
}
b, err = proto.Marshal(d)
if err != nil {
return "", &pb.Attr{}, err
}
err = o.comms.WriteGroup(ctx, parent, []byte(name), b)
if err != nil {
return "", &pb.Attr{}, err
}
// Add the inode entry
n := &pb.InodeEntry{
Version: InodeEntryVersion,
Inode: inode,
IsDir: isdir,
Attr: attr,
Blocks: 0,
}
b, err = proto.Marshal(n)
if err != nil {
return "", &pb.Attr{}, err
}
err = o.WriteChunk(ctx, id, b)
if err != nil {
return "", &pb.Attr{}, err
}
return name, attr, nil
}
开发者ID:wreese,项目名称:cfs-binary-release,代码行数:54,代码来源:file.go
示例13: writeResponse
func writeResponse(w io.Writer, id uint64, serr string, response proto.Message) (err error) {
// clean response if error
if serr != "" {
response = nil
}
// marshal response
pbResponse := []byte{}
if response != nil {
pbResponse, err = proto.Marshal(response)
if err != nil {
return err
}
}
// compress serialized proto data
compressedPbResponse, err := snappy.Encode(nil, pbResponse)
if err != nil {
return err
}
// generate header
header := &wire.ResponseHeader{
Id: id,
Error: serr,
RawResponseLen: uint32(len(pbResponse)),
SnappyCompressedResponseLen: uint32(len(compressedPbResponse)),
Checksum: crc32.ChecksumIEEE(compressedPbResponse),
}
// check header size
pbHeader, err := proto.Marshal(header)
if err != err {
return
}
if uint32(len(pbHeader)) > wire.Default_Const_MaxHeaderLen {
return fmt.Errorf("protorpc.writeResponse: header larger than max_header_len: %d.",
len(pbHeader),
)
}
// send header (more)
if err = sendFrame(w, pbHeader); err != nil {
return
}
// send body (end)
if err = sendFrame(w, compressedPbResponse); err != nil {
return
}
return nil
}
开发者ID:josephwinston,项目名称:cockroach,代码行数:53,代码来源:wire.go
示例14: Symlink
func (o *OortFS) Symlink(ctx context.Context, parent, id []byte, name string, target string, attr *pb.Attr, inode uint64) (*pb.SymlinkResponse, error) {
v, err := o.validateIP(ctx)
if err != nil {
return nil, err
}
if !v {
return nil, errors.New("Unknown or unauthorized FS use")
}
// Check to see if the name exists
val, err := o.comms.ReadGroupItem(ctx, parent, []byte(name))
if err != nil && !store.IsNotFound(err) {
// TODO: Needs beter error handling
return &pb.SymlinkResponse{}, err
}
if len(val) > 1 { // Exists already
return &pb.SymlinkResponse{}, nil
}
n := &pb.InodeEntry{
Version: InodeEntryVersion,
Inode: inode,
IsDir: false,
IsLink: true,
Target: target,
Attr: attr,
}
b, err := proto.Marshal(n)
if err != nil {
return &pb.SymlinkResponse{}, err
}
err = o.WriteChunk(ctx, id, b)
if err != nil {
return &pb.SymlinkResponse{}, err
}
// Add the name to the group
d := &pb.DirEntry{
Version: DirEntryVersion,
Name: name,
Id: id,
}
b, err = proto.Marshal(d)
if err != nil {
return &pb.SymlinkResponse{}, err
}
err = o.comms.WriteGroup(ctx, parent, []byte(name), b)
if err != nil {
return &pb.SymlinkResponse{}, err
}
return &pb.SymlinkResponse{Name: name, Attr: attr}, nil
}
开发者ID:wreese,项目名称:cfs-binary-release,代码行数:49,代码来源:file.go
示例15: updateRangeDescriptor
// updateRangeDescriptor adds a ConditionalPut on the range descriptor. The
// conditional put verifies that changes to the range descriptor are made in a
// well-defined order, preventing a scenario where a wayward replica which is
// no longer part of the original Raft group comes back online to form a
// splinter group with a node which was also a former replica, and hijacks the
// range descriptor. This is a last line of defense; other mechanisms should
// prevent rogue replicas from getting this far (see #768).
func updateRangeDescriptor(b *client.Batch, descKey proto.Key, oldDesc, newDesc *proto.RangeDescriptor) error {
var oldValue []byte
if oldDesc != nil {
var err error
if oldValue, err = gogoproto.Marshal(oldDesc); err != nil {
return err
}
}
newValue, err := gogoproto.Marshal(newDesc)
if err != nil {
return err
}
b.CPut(descKey, newValue, oldValue)
return nil
}
开发者ID:simonzhangsm,项目名称:cockroach,代码行数:22,代码来源:range_command.go
示例16: AddInfoProto
// AddInfoProto adds or updates an info object. Returns an error if info
// couldn't be added.
func (g *Gossip) AddInfoProto(key string, proto gogoproto.Message, ttl time.Duration) error {
bytes, err := gogoproto.Marshal(proto)
if err != nil {
return err
}
return g.AddInfo(key, bytes, ttl)
}
开发者ID:husttom,项目名称:cockroach,代码行数:9,代码来源:gossip.go
示例17: MarshalBinary
// MarshalBinary encodes r to a binary format.
func (r *CreateIteratorResponse) MarshalBinary() ([]byte, error) {
var pb internal.CreateIteratorResponse
if r.Err != nil {
pb.Err = proto.String(r.Err.Error())
}
return proto.Marshal(&pb)
}
开发者ID:skia-dev,项目名称:influxdb,代码行数:8,代码来源:rpc.go
示例18: Run
func (sink *WebsocketSink) Run(inputChan <-chan *events.Envelope) {
stopChan := make(chan struct{})
sink.logger.Debugf("Websocket Sink %s: Running for streamId [%s]", sink.clientAddress, sink.streamId)
context := truncatingbuffer.NewDefaultContext(sink.dropsondeOrigin, sink.Identifier())
buffer := sinks.RunTruncatingBuffer(inputChan, sink.messageDrainBufferSize, context, sink.logger, stopChan)
for {
sink.logger.Debugf("Websocket Sink %s: Waiting for activity", sink.clientAddress)
messageEnvelope, ok := <-buffer.GetOutputChannel()
if !ok {
sink.logger.Debugf("Websocket Sink %s: Closed listener channel detected. Closing websocket", sink.clientAddress)
close(stopChan)
return
}
messageBytes, err := proto.Marshal(messageEnvelope)
if err != nil {
sink.logger.Errorf("Websocket Sink %s: Error marshalling %s envelope from origin %s: %s", sink.clientAddress, messageEnvelope.GetEventType().String(), messageEnvelope.GetOrigin(), err.Error())
continue
}
sink.logger.Debugf("Websocket Sink %s: Received %s message from %s at %d. Sending data.", sink.clientAddress, messageEnvelope.GetEventType().String(), messageEnvelope.GetOrigin(), messageEnvelope.Timestamp)
if sink.writeTimeout != 0 {
sink.ws.SetWriteDeadline(time.Now().Add(sink.writeTimeout))
}
err = sink.ws.WriteMessage(gorilla.BinaryMessage, messageBytes)
if err != nil {
sink.logger.Debugf("Websocket Sink %s: Error when trying to send data to sink %s. Requesting close. Err: %v", sink.clientAddress, err)
close(stopChan)
return
}
sink.logger.Debugf("Websocket Sink %s: Successfully sent data", sink.clientAddress)
}
}
开发者ID:hpcloud,项目名称:loggregator-1,代码行数:35,代码来源:websocket_sink.go
示例19: post
// post posts the call using the HTTP client. The call's method is
// appended to KVDBEndpoint and set as the URL path. The call's arguments
// are protobuf-serialized and written as the POST body. The content
// type is set to application/x-protobuf.
//
// On success, the response body is unmarshalled into call.Reply.
func (s *HTTPSender) post(call *Call) (*http.Response, error) {
// Marshal the args into a request body.
body, err := gogoproto.Marshal(call.Args)
if err != nil {
return nil, err
}
url := fmt.Sprintf("%s://%s%s%s", KVDBScheme, s.server, KVDBEndpoint, call.Method)
req, err := http.NewRequest("POST", url, bytes.NewReader(body))
if err != nil {
return nil, util.Errorf("unable to create request: %s", err)
}
req.Header.Add("Content-Type", "application/x-protobuf")
req.Header.Add("Accept", "application/x-protobuf")
resp, err := s.client.Do(req)
if resp == nil {
return nil, &httpSendError{util.Errorf("http client was closed: %s", err)}
}
defer resp.Body.Close()
if err != nil {
return nil, &httpSendError{err}
}
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, &httpSendError{err}
}
if resp.StatusCode != 200 {
return resp, errors.New(resp.Status)
}
if err := gogoproto.Unmarshal(b, call.Reply); err != nil {
log.Errorf("request completed, but unable to unmarshal response from server: %s; body=%q", err, b)
return nil, &httpSendError{err}
}
return resp, nil
}
开发者ID:josephwinston,项目名称:cockroach,代码行数:41,代码来源:http_sender.go
示例20: JoinRaft
// JoinRaft sends a configuration change to nodes to
// add a new member to the raft cluster
func (n *Node) JoinRaft(ctx context.Context, info *NodeInfo) (*JoinRaftResponse, error) {
meta, err := proto.Marshal(info)
if err != nil {
log.Fatal("Can't marshal node: ", info.ID)
}
confChange := raftpb.ConfChange{
ID: info.ID,
Type: raftpb.ConfChangeAddNode,
NodeID: info.ID,
Context: meta,
}
err = n.ProposeConfChange(n.Ctx, confChange)
if err != nil {
return &JoinRaftResponse{
Success: false,
Error: ErrConfChangeRefused.Error(),
}, nil
}
var nodes []*NodeInfo
for _, node := range n.Cluster.Peers() {
nodes = append(nodes, &NodeInfo{
ID: node.ID,
Addr: node.Addr,
})
}
return &JoinRaftResponse{
Success: true,
Nodes: nodes,
Error: "",
}, nil
}
开发者ID:abronan,项目名称:proton,代码行数:37,代码来源:node.go
注:本文中的github.com/gogo/protobuf/proto.Marshal函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论