go常用操作文件有json,xml, gob 和txt,一般json,xml, gob 都是全部操作 很少修改一个部分快的内容, 所以一般采用 编码、解码实现,txt可能有追加所以相对难一点。 说说自己遇到的坑
1.验证文件或者目录是否存在
// 检查文件或目录是否存在
// 如果由 filename 指定的文件或目录存在则返回 true,否则返回 false
func IsExist(filename string) bool {
_, err := os.Stat(filename)
return err == nil || os.IsExist(err)
}
2在读取文本文件的时候
Readline读满缓冲区就返回,剩下的字节不会丢弃,留着下次读取。这样一行就拆分成了两次读取,两次读取出来的行都与预期的不符,后续的逻辑流程肯定也异常了
解决方法:
1.直接换成ReadBytes(’\ n’) 或 ReadString(’\ n’)
2.对isPrefix返回值做校验
3. os.OpenFile(filePath, os.O_RDWR|os.O_APPEND, 0666) 这个方法的flag一定要注意, 比如 设置成os.O_WRONLY|os.O_APPEND , 去读取文件, 结果是阻塞不是报错。
整个dmeo 如下:
package main
import (
"bufio"
"encoding/gob"
"encoding/json"
"encoding/xml"
"fmt"
"io"
"os"
)
type Website struct {
Name string `xml:"name,attr"`
Url string
Course []string
}
var info []Website
func init() {
info = []Website{
{"Golang", "http://c.biancheng.net/golang/", []string{"http://c.biancheng.net/cplus/", "http://c.biancheng.net/linux_tutorial/"}},
{"Java", "http://c.biancheng.net/java/", []string{"http://c.biancheng.net/socket/