实例说明:

(1)一个Monster结构体,字段Name,Age,Skill

(2)Monster有一个Store方法,可以将一个Monster对象序列化后保存在文件中;

(3)Monster有一个ReStore方法,可以从文件中读取数据并且反序列化;

(4)编译测试用例文件store_test.go,填写测试用例函数TestStore和TestReStore进行测试;

目录结构:

main.go

package main

import (
"bufio"
"encoding/json"
"fmt"
"io"
"os"
) type monster struct {
Name string `json:"name"`
Age int `json:"age"`
Skill string `json:"skill"`
} func (m *monster) store() []byte {
data, err := json.Marshal(&m)
if err != nil {
fmt.Printf("序列化错误,error=%v", err)
}
return data
} func (m *monster) reStore(data string) monster {
err := json.Unmarshal([]byte(data), &m)
if err != nil {
fmt.Printf("反序列化错误,error=%v", err)
}
return *m
} func writeFile(data string, path string) {
file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, )
if err != nil {
fmt.Println("写入到文件中错误,error=", err)
}
defer file.Close()
writer := bufio.NewWriter(file)
writer.WriteString(data)
writer.Flush()
} func readFile(path string) string {
var str string
var e error
file, err := os.OpenFile(path, os.O_RDONLY, )
if err != nil {
fmt.Println("写入到文件中错误,error=", err)
}
defer file.Close()
reader := bufio.NewReader(file)
for {
str, e = reader.ReadString('\n')
if e == io.EOF {
break
}
//如果要返回多个数据的话,可以在这里定义一个切片进行接收每一行的str,最后返回这个切片即可
}
//这里实际上返回的是最后一行数据
return str
} func main() {
m := monster{
Name: "孙悟空",
Age: ,
Skill: "七十二变",
}
data := m.store()
fmt.Println(string(data)) // writeFile(string(data), "test.txt")
str := readFile("test.txt") var mon monster
mon = m.reStore(str)
fmt.Println(mon)
}

main_test.go

package main

import (
"fmt"
"testing"
) func TestStore(t *testing.T) {
m := &monster{
Name: "孙悟空",
Age: ,
Skill: "七十二变",
}
data := m.store()
if string(data) == "" {
t.Fatal("序列化失败")
}
t.Logf("序列化成功")
}
func TestReStore(t *testing.T) {
var m monster
str := "{\"name\":\"孙悟空\",\"age\":200,\"skill\":\"七十二变\"}"
data := m.reStore(str)
fmt.Println(data)
t.Logf("反序列化成功")
} func TestWriteFile(t *testing.T) {
m := &monster{
Name: "孙悟空",
Age: ,
Skill: "七十二变",
}
data := m.store()
writeFile(string(data), "test.txt")
t.Log("存储成功")
} func TestReadFile(t *testing.T) {
data := readFile("test.txt")
if data == "" {
t.Fatal("读取失败")
}
t.Log("读取成功")
}

最新文章

  1. $x^2+y^2=c^2$
  2. 解决VS2010子目录中的.cpp文件引用上一级目录的stdafx.h找不到定义的问题
  3. img标签中的图片加载异常时显示默认的图片
  4. Java socket中关闭IO流后,发生什么事?(以关闭输出流为例)
  5. ZOJ Problem Set - 3865 Superbot (bfs)
  6. 【转】获取手机的ipv4地址
  7. Stateless Iterators
  8. [BZOJ 3144] [Hnoi2013] 切糕 【最小割】
  9. C#操作Office.word(三)
  10. MSSQL - 存储过程OutPut返回值
  11. ZOJ 3795 Grouping(Tarjan收缩点+DAG)
  12. ubuntu下的apache+php+mysql的安装
  13. 关于centos连接mssql的问题
  14. 201521123090《Java程序设计》第6周学习总结
  15. DEBUG技巧-设定合适的日志级别
  16. Spark源码剖析(七):Job触发流程原理与源码剖析
  17. 0x80070522:客户端没有所需的特权的解决方法(win7,win10通过)
  18. Hibernate two table same id
  19. BZOJ2255 : [Swerc2010]Palindromic DNA
  20. Shiro缓存(十三)

热门文章

  1. 使用os模块动态获取目录或文件路径
  2. DOS命令行操作MySQL常用命令
  3. [ida]查看某一函数在程序中被谁引用
  4. oracle学习笔记(九) SQL常用函数说明以及使用
  5. C#数组1
  6. 织梦DEDECMS本地后台操作卡顿的解决方法
  7. Dynamics 365 We API ODATA语法根据父记录查询子记录,根据子记录查询父记录(附上根据团队,队列名称查成员)
  8. Java实现图片按修改时间排序
  9. python3基础学习(1)
  10. selenium的web自动化实战