4

golang利用gob序列化struct对象保存到本地

 1 year ago
source link: https://studygolang.com/articles/2888?fr=sidebar
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

golang利用gob序列化struct对象保存到本地

reflectsky · 2015-04-22 03:00:00 · 9526 次点击 · 预计阅读时间 1 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2015-04-22 03:00:00 的文章,其中的信息可能已经有所发展或是发生改变。

golang可以通过json或gob来序列化struct对象,虽然json的序列化更为通用,但利用gob编码可以
实现json所不能支持的struct的方法序列化,利用gob包序列化struct保存到本地也十分简单.

gob包实现的序列化struct对象保存到本地

务必注意的是golang序列化有个小坑,就是struct里的字段必须要可导出也就是首字母大写

package main

import (
	"encoding/gob"
	"fmt"
	"os"
)

type User struct {
	Id   int
	Name string
}

func (this *User) Say() string {
	return this.Name + ` hello world ! `
}

func main(){
    file, err := os.Create("mygo/gob")
    if err != nil {
        fmt.Println(err)
    }
    user := User{Id: 1, Name: "Mike"}
    user2 := User{Id: 3, Name: "Jack"}
    u := []User{user, user2}
    enc := gob.NewEncoder(file)
    err2 := enc.Encode(u)
    fmt.Println(err2)
}

利用gob反序列化本地的struct对象

要成功反序列化本地保存的对象,前提是要知道本地保存的struct的结构

package main

import (
	"encoding/gob"
	"fmt"
	"os"
)
type User struct {
	Id   int
	Name string
}

func (this *User) Say() string {
	return this.Name + ` hello world ! `
}

var u []User
file, err := os.Open("mygo/gob")
if err != nil {
    fmt.Println(err)
}
dec := gob.NewDecoder(file)
err2 := dec.Decode(&u)

if err2 != nil {
    fmt.Println(err2)
    return
}

for _ , user := range u {
    fmt.Println(user.Id)
    fmt.Println(user.Say())
}

gob编码序列化struct对象保存到本地的应用场景我想是小应用需要保存数据在本地,这样就不需要用到
sql数据库,可以简单部署应用.


有疑问加站长微信联系(非本文作者)

280

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK