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
    }
    
  • 相关阅读:
    asp.net linux 环境部署, jexus
    SAP选择屏幕下拉框实现
    SAP 选择屏幕的上方 (sscrfields) 按钮设置
    SAP笔记
    SAP导出内表数据到excel
    SAP笔记---非-现存任务/请求XXX上的请求锁定
    ABAP知识点笔记
    关联带出字段内容
    REUSE_ALV_GRID_DISPLAY详解
    django发送邮件send_mail&send_mass_mail
  • 原文地址:https://www.cnblogs.com/brady-wang/p/14442598.html
Copyright © 2011-2022 走看看