实例说明:
(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/jsonfmtioos" ) type monster struct { Name string `json:name` Age int `json:age` Skill 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),&反序列化错误,error=%vreturn *m } func writeFile(data string,path ) { file,err := os.OpenFile(path,os.O_WRONLY|os.O_CREATE,0666) nil { fmt.Println(写入到文件中错误,error= bufio.NewWriter(file) writer.WriteString(data) writer.Flush() } func readFile(path string) { var str string var e error file,os.O_RDONLY,err) } defer file.Close() reader := bufio.NewReader(file) for { str,e = reader.ReadString('\n') if e == io.EOF { break } //如果要返回多个数据的话,可以在这里定义一个切片进行接收每一行的str,最后返回这个切片即可 } 这里实际上返回的是最后一行数据 str } func main() { m := monster{ Name: 孙悟空200七十二变 m.store() fmt.Println((data)) writeFile(string(data),"test.txt") str := readFile(test.txt) mon monster mon = m.reStore(str) fmt.Println(mon) }
main_test.go
testing ) func TestStore(t *testing.T) { m := &monster{ Name: m.store() if string(data) == "" { t.Fatal(序列化失败) } t.Logf(序列化成功) } func TestReStore(t *testing.T) { m monster str := {\"name\":\"孙悟空\",\"age\":200,\"skill\":\"七十二变\"} data := m.reStore(str) fmt.Println(data) t.Logf(反序列化成功) } func TestWriteFile(t * m.store() writeFile(string(data),1)">) t.Log(存储成功) } func TestReadFile(t *testing.T) { data := readFile(if data == 读取失败) } t.Log(读取成功) }