"http.FileServer(http.Dir...))" 不能在单独的包中工作
"http.FileServer(http.Dir...))" not working in separate package
目录树:
.
├── main.go
└── web
├── app.go
└── views
├── index.html
└── js
└── app.jsx
这个有效:
package main
import (
"net/http"
)
func main() {
http.Handle("/", http.FileServer(http.Dir("./web/views")))
http.ListenAndServe(":3000", nil)
}
但是这个returns404 page not found
:
main.go:
package main
import (
"{dir with main.go}/web"
)
func main() {
web.StartHttp()
}
app.go:
package web
import (
"fmt"
"net/http"
)
func StartHttp() {
fmt.Println("STARTHTTP - CHECK 01")
http.Handle("/", http.FileServer(http.Dir("./views")))
http.ListenAndServe(":3000", nil)
}
终端打印STARTHTTP - CHECK 01
,所以调用了StartHttp()
函数,终端要求允许传入网络连接,所以http服务器好像在监听端口。
是否有某种类型的上下文未传递给其他包?
您给 http.Dir
的路径是相对于应用程序所在的位置 运行 (它的工作目录,在您的情况下是您发布的目录树的根目录)而不是相对于.go
文件是。只需将路径更改为 ./web/views
即可。
在您的情况下,返回 404 Not Found
,因为目录树的顶层没有 views
文件夹,因此没有要提供的文件。
记住 Go 是一种编译型语言;该程序所做的大部分事情都发生在 运行 时间。
特别是,在这种情况下,对 http.Dir()
的调用发生在 运行 时间,这意味着路径在 运行 时间被评估。
因为您提供的路径是相对的,因此它是相对于您 运行 应用程序所在的工作目录的。源代码所在目录与此处无关
在对 http.Dir()
的一次调用中,您给出了参数 ./web/views
,但在另一次调用中,您给出了参数 ./views
。事实证明,基于您执行程序的目录的正确路径是 ./web/views
。当您使用错误的路径执行程序时,您会收到 404 page not found
错误,因为指定的路径在您的工作目录中不存在。
目录树:
.
├── main.go
└── web
├── app.go
└── views
├── index.html
└── js
└── app.jsx
这个有效:
package main
import (
"net/http"
)
func main() {
http.Handle("/", http.FileServer(http.Dir("./web/views")))
http.ListenAndServe(":3000", nil)
}
但是这个returns404 page not found
:
main.go:
package main
import (
"{dir with main.go}/web"
)
func main() {
web.StartHttp()
}
app.go:
package web
import (
"fmt"
"net/http"
)
func StartHttp() {
fmt.Println("STARTHTTP - CHECK 01")
http.Handle("/", http.FileServer(http.Dir("./views")))
http.ListenAndServe(":3000", nil)
}
终端打印STARTHTTP - CHECK 01
,所以调用了StartHttp()
函数,终端要求允许传入网络连接,所以http服务器好像在监听端口。
是否有某种类型的上下文未传递给其他包?
您给 http.Dir
的路径是相对于应用程序所在的位置 运行 (它的工作目录,在您的情况下是您发布的目录树的根目录)而不是相对于.go
文件是。只需将路径更改为 ./web/views
即可。
在您的情况下,返回 404 Not Found
,因为目录树的顶层没有 views
文件夹,因此没有要提供的文件。
记住 Go 是一种编译型语言;该程序所做的大部分事情都发生在 运行 时间。
特别是,在这种情况下,对 http.Dir()
的调用发生在 运行 时间,这意味着路径在 运行 时间被评估。
因为您提供的路径是相对的,因此它是相对于您 运行 应用程序所在的工作目录的。源代码所在目录与此处无关
在对 http.Dir()
的一次调用中,您给出了参数 ./web/views
,但在另一次调用中,您给出了参数 ./views
。事实证明,基于您执行程序的目录的正确路径是 ./web/views
。当您使用错误的路径执行程序时,您会收到 404 page not found
错误,因为指定的路径在您的工作目录中不存在。