我剛剛開始學習 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 關注
- 125 瀏覽
添加回答
舉報
0/150
提交
取消