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())
    }
  • 相关阅读:
    POJ-1318(list.sort()输出不为字典序,map才是按字典序排列)
    C++ 进阶
    命令模式在MVC框架中的应用
    使用NoSQL Manager for MongoDBclient连接mongodb
    第一部分 学习函数式思维
    【剑指offer】复杂链表的复制
    Hadoop-2.4.0分布式安装手冊
    Impala中多列转为一行
    js(jquery)绑定点击事件
    hdu1243 最长公共子序列(LCS)
  • 原文地址:https://www.cnblogs.com/zengyjun/p/10129739.html
Copyright © 2011-2022 走看看