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())
    }
  • 相关阅读:
    十一作业
    11.20
    11.13 第十二次、
    11.13 第十一次、
    11.06第十次、
    11.06第九次、
    10.30
    10.23
    10.16
    10.9
  • 原文地址:https://www.cnblogs.com/zengyjun/p/10129739.html
Copyright © 2011-2022 走看看