私はすべての単一のHTTP GETリクエストで呼び出される関数を持っています。この関数はファイルを読み込み、そのファイルの内容に何らかの処理を行い、それらの内容のバイトスライスを返します。このバイトのスライスは、HTTP応答ライターへの応答本文として書き込まれます。ファイルからゴングを読む - ロックするのは安全ですか?
複数のHTTP要求が同じファイルを読み込もうとした場合にロックを防止するために、この関数の任意のステップにmutexを使用する必要がありますか?もしそうなら、私は実際にそれに書き込むのではなく、その内容のコピーを作成しているので、ファイルの読み込みをロックするシンプルなRWMutexで十分でしょうか?ここで
が関数である:
// prepareIndex will grab index.html and add a nonce to the script tags for the CSP header compliance.
func prepareIndex(nonce string) []byte {
// Load index.html.
file, err := os.Open("./client/dist/index.html")
if err != nil {
log.Fatal(err)
}
// Convert to goquery document.
doc, err := goquery.NewDocumentFromReader(file)
if err != nil {
fmt.Println(err)
}
// Find all script tags and set nonce.
doc.Find("body > script").SetAttr("nonce", nonce)
// Grab the HTML string.
html, err := doc.Html()
if err != nil {
fmt.Println(err)
}
return []byte(html)
}
私も一度だけと、メイン開始ファイルのロードと思ったが、私は最初の要求は、データと後続の要求は何も見なかった見ることができた問題を抱えていました。おそらく、私がファイルを読んでいる間のエラー。しかし、私は実際には私の現在のアプローチを好む。なぜなら、index.html
に何らかの変更があったとしても、それらを実行可能ファイルを再起動することなくすぐにユーザーに永続させたいからです。
https://godoc.org/github.com/fsnotify/fsnotifyあなたは、このレポhttps://github.com/nightlyone/lockfileをチェックしましたか? –