十八、文件持久化(CSV&GOB)

1.CSV

encoding/csv 包提供對 csv 文件讀寫的操作
a) 常用結構體
⚫ Reader
常用函數
➢ NewReader
常用方法
➢ Read
➢ ReadAll
⚫ Writer
常用函數
➢ NewWriter
常用方法
➢ Write
➢ WriteAll
➢ Flush
(1)Csvreader

package main

import (
   "encoding/csv"
   "fmt"
   "io"
   "os"
)

func main() {
   file,err := os.Open("user.csv")
   if err == nil {
      defer file.Close()
      //這裏也可以用帶緩衝的
      reader :=  csv.NewReader(file)
      for {
         line,err := reader.Read()
         if err != nil {
            if err != io.EOF{
               fmt.Println(err)
            }
            break
         }else {
            fmt.Println(line)
         }
      }
   }
}

(2)Csvwriter

package main

import (
   "encoding/csv"
   "os"
)

func main() {
   file ,err:= os.Create("user.csv")
   if err != nil {
   }else if err == nil  {
      defer file.Close()
      writer := csv.NewWriter(file)
      writer.Write([]string{"ID","Age","Name"})
      writer.Write([]string{"1","24","c"})
      writer.Flush()
   }
}

2.GOB

encoding/gob 包提供了對數據結構進行二進制序列化的功能
a) 常用函數
⚫ Register:註冊 gob 編解碼記錄值
⚫ RegisterName:註冊 gob 編解碼記錄值,並指定名稱
b) 常用結構體
⚫ Encoder
常用函數
➢ NewEncoder: 創建編碼器
常用方法
➢ Encode:將對象進行編碼到流對象中
⚫ Decoder
常用函數
➢ NewDecoder:創建解碼器
常用方法
➢ Decode:將流對象中的數據編碼到對象中
(1)Gobdecode

package main

import (
   "encoding/gob"
   "fmt"
   "os"
)
type User struct {
   ID int
   Name  string
}
func main() {
   //把文件中的數據放在內存中
   users := map[int]User{}
   file,err := os.Open("user.gob")
   if err == nil {
      defer  file.Close()
      decoder := gob.NewDecoder(file)
      decoder.Decode(&users)
      fmt.Println(users)
   }
}

(2)Gobencode

package main

import (
   "encoding/gob"
   "os"
)


type User struct {
   ID int
   Name  string
}

func main() {
   users := map[int]User{
      1:{1,"AA"},
      2:{2,"BB"},
      3:{3,"CC"},
   }
   //把內存中的數據存在文件中
   file,err := os.Create("user.gob")
   if err == nil {
      defer file.Close()
      encoder := gob.NewEncoder(file)
      encoder.Encode(users)
   }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章