golang学习笔记--struct同时用于bson json
1 2 3 4 5 | type User struct { Name string `json: "name,omitempty" bson: "name,omitempty" ` Secret string `json: "-,omitempty" bson: "secret,omitempty" ` } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | package bson_json import ( "encoding/json" "errors" "fmt" "gopkg.in/mgo.v2/bson" "os" "testing" ) type User struct { Name string `json: "name,omitempty" bson: "name,omitempty" ` CSDN string `json: "csdn,omitempty" bson: "csdn,omitempty" ` Quote string `json: "quote,omitempty" bson: "quote,omitempty" ` } var user = User{ Name: "许大侠" , CSDN : "https://blog.csdn.net/halo_hsuh" , Quote: "听我一言, 看清远方" , } func toBsonBytes() []byte { /* 结构体序列化成bson格式[]byte */ data, err := bson.Marshal(user) if nil != err { fmt.Println( "序列化Bson失败" ) return nil } return data } func toJsonBytes() []byte { /* 结构体序列化成bson格式[]byte */ data, err := json.Marshal(user) if nil != err { fmt.Println( "序列化Json失败" ) return nil } return data } func ToFile(fileName string, data []byte) error { file, err := os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY, 0666) if nil != err { return err } length, err := file.Write(data) if nil != err { return err } if length < len(data) { return errors.New( "Write Error: Length Error." ) } return nil } func Print(u User) { fmt.Println( "名字: " , u.Name, "; CSDN: " , u.CSDN, "; 名言: " , u.Quote) } func TestBson(t *testing.T) { var tempUser User data := toBsonBytes() /* bson格式[]byte 反序列化成结构体 */ err := bson.Unmarshal(data, &tempUser) if nil != err { fmt.Println( "反序列化Bson失败" , err) return } Print(tempUser) ToFile( "./hello.bson" , data) // 将序列化的数据存储进文件 } func TestJson(t *testing.T) { var tempUser User data := toJsonBytes() /* bson格式[]byte 反序列化成结构体 */ err := json.Unmarshal(data, &tempUser) if nil != err { fmt.Println( "反序列化Json失败: " , err) return } Print(tempUser) ToFile( "./hello.json" , data) // 将序列化的数据存储进文件 } func TestJsonToBson(t *testing.T) { // 获取json []byte data := toJsonBytes() fmt.Println(data) var tempUser User // 将json转化成bson 结构体 err := bson.UnmarshalJSON(data, &tempUser) if nil != err { fmt.Println( "Json 转 Bson失败: " , err) } Print(tempUser) // 结构体再转化为json data2, err := bson.MarshalJSON(tempUser) if nil != err { fmt.Println( "Bson 转 Json失败: " , err) } fmt.Println(data2) } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步