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

我刚刚开始学习 Go。我正在编写一个小型服务器应用程序,处理请求的函数(方法)(通过 http.HandleFunc)写入文件 - 始终是同一个文件。据我了解,由于 http.HandleFunc 为每个请求启动一个新的 goroutine,因此我担心文件写入可能最终会以某种方式相互干扰 - 通过相互阻塞或只是重叠。


查看实际输出,到目前为止这个问题还没有出现,但是它是否会出现,如果是的话我该如何解决它?


这是我的代码的清理版本:


package main

import (

     "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()


}

理想情况下,我希望按照请求进入的顺序进行文件写入,但这并不那么重要。我更担心不同的文件写入会以某种方式干扰。


回首忆惘然
浏览 67回答 1
1回答

翻阅古今

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