我剛剛開始學(xué)習(xí) Go。我正在編寫一個(gè)小型服務(wù)器應(yīng)用程序,處理請(qǐng)求的函數(shù)(方法)(通過 http.HandleFunc)寫入文件 - 始終是同一個(gè)文件。據(jù)我了解,由于 http.HandleFunc 為每個(gè)請(qǐng)求啟動(dòng)一個(gè)新的 goroutine,因此我擔(dān)心文件寫入可能最終會(huì)以某種方式相互干擾 - 通過相互阻塞或只是重疊。查看實(shí)際輸出,到目前為止這個(gè)問題還沒有出現(xiàn),但是它是否會(huì)出現(xiàn),如果是的話我該如何解決它?這是我的代碼的清理版本: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()}理想情況下,我希望按照請(qǐng)求進(jìn)入的順序進(jìn)行文件寫入,但這并不那么重要。我更擔(dān)心不同的文件寫入會(huì)以某種方式干擾。
1 回答

翻閱古今
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊
文件寫入是阻塞的和原子的。因此,并發(fā)寫入將相互等待,并且不會(huì)相互“干擾”,盡管輸出可能會(huì)交錯(cuò)。如果您想要更多控制,請(qǐng)用 a 包裝您的寫入,sync.Mutex
以確保一個(gè)例程在下一個(gè)例程開始寫入之前完成所有寫入。
- 1 回答
- 0 關(guān)注
- 130 瀏覽
添加回答
舉報(bào)
0/150
提交
取消