为了账号安全,请及时绑定邮箱和手机立即绑定

Golang中的http.HandleFunc内部异步文件写入

Golang中的http.HandleFunc内部异步文件写入

Go
回首忆惘然 2023-07-17 16:21:13
我刚刚开始学习 Go。我正在编写一个小型服务器应用程序,处理请求的函数(方法)(通过 http.HandleFunc)写入文件 - 始终是同一个文件。据我了解,由于 http.HandleFunc 为每个请求启动一个新的 goroutine,因此我担心文件写入可能最终会以某种方式相互干扰 - 通过相互阻塞或只是重叠。查看实际输出,到目前为止这个问题还没有出现,但是它是否会出现,如果是的话我该如何解决它?这是我的代码的清理版本:package mainimport (     "os"     "net/http")type Service struct{     file *os.File}func (ser *Service) handleRequest(w http.ResponseWriter, req *http.Request){     //do lots of stuff that does not affect file     message := ...     n, err := ser.file.Write(message) //This is what I'm worried about     //handle error and wrap up}func main(){     m := http.NewServeMux()     fi,err := os.Open("/boolanger/file.txt")     //handle error     ser := &Service{file:fi}     m.HandleFunc("/service/", ser.handleRequest)     server := http.Server{        Addr:    ":8080",        Handler: m}     serverError := server.ListenAndServe()}理想情况下,我希望按照请求进入的顺序进行文件写入,但这并不那么重要。我更担心不同的文件写入会以某种方式干扰。
查看完整描述

1 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

文件写入是阻塞的和原子的。因此,并发写入将相互等待,并且不会相互“干扰”,尽管输出可能会交错。如果您想要更多控制,请用 a 包装您的写入,sync.Mutex以确保一个例程在下一个例程开始写入之前完成所有写入。



查看完整回答
反对 回复 2023-07-17
  • 1 回答
  • 0 关注
  • 79 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信