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())
    }
  • 相关阅读:
    [loj2706]文本编辑器
    [atAGC053C]Random Card Game
    [atAGC056E]Cheese
    [cf1615G]Maximum Adjacent Pairs
    [cf739D]Recover a functional graph
    [uoj693]地铁规划
    [atAGC053E]More Peaks More Fun
    [atAGC056B]Range Argmax
    [atAGC056F]Degree Sequence in DFS Order
    SceneGrabber NET 视频批量自动截图软件使用技巧
  • 原文地址:https://www.cnblogs.com/zengyjun/p/10129739.html
Copyright © 2011-2022 走看看