gpt4 book ai didi

go - 异步文件写入 Golang 中的 http.HandleFunc

转载 作者:数据小太阳 更新时间:2023-10-29 03:33:38 25 4
gpt4 key购买 nike

我刚刚开始学习围棋。我正在编写一个小型服务器应用程序,处理请求的函数(方法)(通过 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()

}

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

最佳答案

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

关于go - 异步文件写入 Golang 中的 http.HandleFunc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57710510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com