我刚刚开始学习 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
以确保一个例程在下一个例程开始写入之前完成所有写入。
- 1 回答
- 0 关注
- 79 浏览
添加回答
举报
0/150
提交
取消