tubaobaoya3 发表于 2018-9-20 10:42:51

golang利用gob序列化struct对象保存到本地

  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())
  
}
  

  gob编码序列化struct对象保存到本地的应用场景我想是小应用需要保存数据在本地,这样就不需要用到
  
sql数据库,可以简单部署应用.


页: [1]
查看完整版本: golang利用gob序列化struct对象保存到本地