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())
    }
  • 相关阅读:
    yun2win-iOS端IM SDK使用方法
    题解
    普通乘法,加法等时间复杂度计算
    noip2014 解方程(本博文转载于http://blog.csdn.net/popoqqq/article/details/40984859,略有删减)
    检查
    关于对拍 (来自老胡)
    2014 NOIP 赛前自我整理提醒。
    USACO 2014 JAN 滑雪录像
    Vue 双向绑定原理
    Vue 路由
  • 原文地址:https://www.cnblogs.com/zengyjun/p/10129739.html
Copyright © 2011-2022 走看看