我刚刚开始学习 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()
}
理想情况下,我希望按照请求进入的顺序进行文件写入,但这并不那么重要。我更担心不同的文件写入会以某种方式干扰。
翻阅古今
相关分类