私は静的ファイルをGoで処理していますが、いくつかのチュートリアルやその他のSOの回答(hereとhere)に従ってください。 I には他にも数多くの類似の質問がありましたが、答えは私のために働いていません。私は他の質問のほとんどとは少し違う経路を実装しているので、問題の原因となっている微妙な問題があるのだろうかと思っていますが、残念ながら私のGoスキルはそれが何であるか見るのに十分なほど磨かれていません。私のコードは以下の通りです(ハンドラのコードは関係ないはずですので除外しました)。gorilla/muxを使用してGoで静的ファイルを処理する
package main
import (
"net/http"
"github.com/gorilla/mux"
)
func NewRouter() *mux.Router {
router := mux.NewRouter().StrictSlash(true)
for _, route := range routes {
var handler http.Handler
handler = route.HandlerFunc
handler = Logger(handler, route.Name)
router.
Methods(route.Method).
Path(route.Path).
Name(route.Name).
Handler(handler)
}
// This should work?
fs := http.FileServer(http.Dir("./static"))
router.PathPrefix("/static/").Handler(http.StripPrefix("/static/", fs))
return router
}
router.go
package main
import (
"net/http"
"web-api/app/handlers"
)
type Route struct {
Name string
Method string
Path string
HandlerFunc http.HandlerFunc
}
type Routes []Route
var routes = Routes{
Route{
"Index",
"GET",
"/",
handlers.Index,
},
Route{
"Login",
"GET",
"/login",
handlers.GetLogin,
},
Route{
"Login",
"POST",
"/login",
handlers.PostLogin,
},
}
main.go
...
func main() {
router := NewRouter()
log.Fatal(http.ListenAndServe(":8080", router))
}
routes.goマイファイル構造をs etupとして:ブラウザがアクセスすることはできませんいくつかの理由
- app
- main.go
- router.go
- routes.go
- static/
- stylesheets/
- index.css
はlocalhost:8080 /静的/スタイルシート/ index.css
あなたは 'app'ディレクトリからアプリケーションを実行していますか?パス '。/ static'は、ソースファイルではなく、現在の作業ディレクトリからの相対パスです。 –
私はappの親ディレクトリからビルドしていました。それは_inside_ appの作品です。ありがとうございました!回答として残しておけば、あなたの答えを正しいものとしてマークします。絶対パスを使用するとどこからでも構築できますか? –
これは、アプリケーションをビルドする場所とは関係ありません。これは、アプリケーションを実行する場所の現在の作業ディレクトリに依存します。 –