zoukankan      html  css  js  c++  java
  • golang利用gob序列化struct对象保存到本地(转载)

    转载自https://www.cnblogs.com/reflectsky/p/golang-gob-struct.html

    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())
    }
  • 相关阅读:
    chapter2——习题
    chapter2 算法——程序的灵魂
    物理数据库设计 读书笔记
    从visio数据库脚本生成添加 MS_Description 的sql脚本
    SSIS包中CASE与NVARCHAR的恩怨
    又到年末
    delicious备份文件转入firefox书签,delicious2firefox 原创、开源
    软件架构设计 温昱著 读书笔记
    重构 读书笔记
    再遇SSIS包与MSSQL问题
  • 原文地址:https://www.cnblogs.com/zengyjun/p/10129739.html
Copyright © 2011-2022 走看看