实例说明:
(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(读取成功) }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。