次の関数は、一連のシステム コールを実行して、マップされたファイル バッファーを拡大します。
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行のエラー処理コードがあります。これを行うためのよりクリーンな方法はありますか?