以下函数进行一系列系统调用以扩大映射文件缓冲区:
func (file *File) Ensure(more int) (err error) {
if file.Append+more <= cap(file.Buf) {
return
}
// there is not enough room
if err = syscall.Munmap(file.Buf); err != nil {
return
}
if _, err = file.Fh.Seek(0, os.SEEK_END); err != nil {
return
}
if _, err = file.Fh.Write(make([]byte, file.Growth)); err != nil {
return
}
if err = file.Fh.Sync(); err != nil {
return
}
if file.Buf, err = syscall.Mmap(int(file.Fh.Fd()), 0, cap(file.Buf)+file.Growth, syscall.PROT_READ|syscall.PROT_WRITE, syscall.MAP_SHARED); err != nil {
return
}
return
}
在 5 行中进行了 5 个系统调用,并且有11行错误处理代码。有没有更清洁的方法来做到这一点?