zoukankan      html  css  js  c++  java
  • protobuf序列化

    package main
    
    import (
    	"fmt"
    	"github.com/gogo/protobuf/jsonpb"
    	"github.com/golang/protobuf/proto"
    	"io/ioutil"
    	"log"
    	"test/src/first"
    )
    
    
    func main() {
    	person := newPersonMessage()
    	//fmt.Println(person.GetUsername())
    	//_ = writeToFile("person.bin", person)
    
    	//pm := first.PersonMessage{}
    	//
    	//_ = readFromFile("person.bin",&pm)
    
    	fmt.Println(&person)
    
    	jsonstr := toJson(person)
    	fmt.Println(jsonstr)
    
    	pm3 := first.PersonMessage{}
    	_ = fromJson(jsonstr,&pm3)
    	fmt.Println(&pm3)
    
    }
    
    func toJson(pm proto.Message)  string {
    	marshaler := jsonpb.Marshaler{Indent: "    "}
    	str,err := marshaler.MarshalToString(pm)
    	if err != nil{
    		log.Fatalln("转换失败")
    	}
    
    	return str
    
    }
    
    func fromJson(in string,pb proto.Message) error  {
    	err := jsonpb.UnmarshalString(in,pb); if err!=nil{
    		log.Fatalln("失败")
    	}
    
    	return nil
    }
    
    func readFromFile(filename string,pb proto.Message) error  {
    	dateBytes,err := ioutil.ReadFile("./person.bin"); if err!=nil{
    		log.Fatalln("读取失败")
    	}
    
    	err =proto.Unmarshal(dateBytes,pb)
    	if err!=nil{
    		log.Fatalln("序列化失败")
    	}
    
    	return nil
    }
    
    
    func writeToFile(filename string,pb proto.Message) error  {
    	data,error := proto.Marshal(pb)
    	if error !=nil{
    		log.Fatalln("无法序列化到bytes")
    	}
    
    	if err := ioutil.WriteFile(filename,data,0644); err !=nil{
    		log.Fatalln("无法写入到文件")
    	}
    	log.Println("写入成功")
    	return nil
    }
    
    func newPersonMessage() * first.PersonMessage  {
    
    	p := first.PersonMessage{
    		Id:       1,
    		Username: "hello",
    	}
    	return &p
    }
    
  • 相关阅读:
    Nginx 的 server_names_hash_bucket_size 问题
    Linux 查看CPU信息、机器型号等硬件信息
    JS中的prototype[转载]
    memcache适用和不适用场景[转载]
    php的socket通信【转载】
    fastcgi与cgi的区别[转载]
    PHP类和对象
    SVN的配置和使用
    PHP_pear的安装和使用
    [转]Python tips: 什么是*args和**kwargs?
  • 原文地址:https://www.cnblogs.com/brady-wang/p/14442598.html
Copyright © 2011-2022 走看看