golang 文件Seek和Truncate的结合使用
在需要分步写入整条信息时做回滚操作时使用
/* * @Description: * @Author: gphper * @Date: 2021-11-06 20:11:56 */ package main import ( "fmt" "io" "log" "os" ) func main() { f, err := os.OpenFile(`file.txt`, os.O_RDWR, os.ModePerm) if err != nil { log.Fatal(err) } initSize, err := f.Seek(0, io.SeekEnd) if err != nil { log.Fatal(err) } fmt.Println(initSize) //模拟出错时出错时 f.WriteString("error!") //恢复写之前的状态 err = f.Truncate(initSize) if err != nil { log.Fatal(err) } _, err = f.Seek(initSize, io.SeekStart) if err != nil { log.Fatal(err) } //状态恢复完成 //开始新的写操作 _, err = f.WriteString("new start text") if err != nil { log.Fatal(err) } }