gpt4 book ai didi

linux - 静态文件在从 Go 提供服务时不会更新

转载 作者:IT王子 更新时间:2023-10-29 00:40:04 25 4
gpt4 key购买 nike

我开始学习 Go,并且对静态文件句柄有问题。有这个:

func main() {
fs := http.FileServer(http.Dir("public"))
http.Handle("/", fs)
err := http.ListenAndServe(":8080", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}

文件夹结构:

main.go

public
- index.html

当我运行 go run main.go 之后,更改 index.html 中的内容,然后再次运行 go run main.go,在浏览器中的 View 没有改变。所以我搜索了一下,认为它们在 go 编译的二进制文件中,并且由于 main.go 没有改变,go 不会重新编译它。所以我运行 go run -a main.go 来强制重新编译,但它没有帮助。

我清除了 chrome 中的历史记录和缓存,甚至尝试了另一个浏览器和 curl,但仍然看到旧的静态文件,而在文件系统中只有新版本。所以这与浏览器无关。实际上有效的一件事是将 public 重命名为 public2(例如)并在 main.go 中进行相同的更改,当我看到新的浏览器中静态文件的版本。

这不是 Go 的问题,因为这个例子在其他用户中运行正常。所以这与我的系统有关。我在 Vagrant 中的默认 Ubuntu 16.04 上运行该代码。

Vagrant 文件:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
config.vm.network "forwarded_port", guest: 8080, host: 8080
config.vm.network "forwarded_port", guest: 5432, host: 5432
end

请求头:

2017/11/19 18:25:45 request.RequestURI: /
2017/11/19 18:25:45 request.RemoteAddr: 10.0.2.2:50584
2017/11/19 18:25:45 request.TLS: <nil>
2017/11/19 18:25:45 Request Headers:
2017/11/19 18:25:45 Accept : [text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8]
2017/11/19 18:25:45 Accept-Encoding : [gzip, deflate, br]
2017/11/19 18:25:45 Accept-Language : [en-US,en;q=0.9,ru;q=0.8]
2017/11/19 18:25:45 Cache-Control : [max-age=0]
2017/11/19 18:25:45 Connection : [keep-alive]
2017/11/19 18:25:45 If-Modified-Since : [Sun, 19 Nov 2017 16:24:53 GMT]
2017/11/19 18:25:45 Upgrade-Insecure-Requests : [1]
2017/11/19 18:25:45 User-Agent : [Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36]

响应头:

HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Length: 2010
Content-Type: text/html; charset=utf-8
Last-Modified: Sun, 19 Nov 2017 16:24:53 GMT
Date: Sun, 19 Nov 2017 18:25:27 GMT

结论:我在另一个虚拟机上运行它并且一切正常,所以虚拟机有一些问题,但现在我不知道是什么问题。

最佳答案

go run本质上 builds a binary, copies it to a tmp folder and then executes it (不止于此,但足以满足我们的目的)。

我通过复制您提供的 main.go 然后执行以下操作来测试您的示例:

go run main.go
# in a new tab
curl localhost:8080
# ==> "Hello world"
echo "2" >> public/index.html
curl localhost:8080
# ==> "Hello world\n2"

关于linux - 静态文件在从 Go 提供服务时不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47378854/

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