golang http 服务端高并发操作文件加锁
时间: 2023-07-26 11:07:07 浏览: 160
在 golang 中,可以使用 `sync` 包提供的 `Mutex` 来实现文件加锁。下面是一个示例代码:
```go
package main
import (
"fmt"
"net/http"
"os"
"sync"
)
var mu sync.Mutex
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
func handler(w http.ResponseWriter, r *http.Request) {
filename := "example.txt"
mu.Lock()
defer mu.Unlock()
file, err := os.OpenFile(filename, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644)
if err != nil {
fmt.Fprintf(w, "Failed to open file: %s", err)
return
}
defer file.Close()
_, err = file.WriteString("Hello, World!\n")
if err != nil {
fmt.Fprintf(w, "Failed to write file: %s", err)
return
}
fmt.Fprint(w, "File written successfully!")
}
```
在上面的代码中,我们定义了一个 `Mutex` 变量 `mu`,然后在处理 HTTP 请求时,先调用 `mu.Lock()` 进行加锁,然后进行操作,最后调用 `mu.Unlock()` 进行解锁。这样就可以保证对文件的操作是互斥的,从而避免了并发问题。
阅读全文