[解決済み] go ウェブサーバーを使って静的な html ファイルを提供するにはどうすればよいですか?
質問
go ウェブサーバを使って index.html (または他の静的な HTML ファイル) を提供するにはどうしたらよいでしょうか?
私は、go web サーバーから提供できる基本的な静的 HTML ファイル (たとえば、記事のような) が欲しいだけです。 HTML は、HTML テンプレートを使用する場合のように、go プログラムの外部で変更可能であるべきです。
これは、ハードコードされたテキスト ("Hello world!") のみをホストする私の Web サーバーです。
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello world!")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":3000", nil)
}
どのように解決するのですか?
Golangのnet/httpパッケージがあれば簡単です。
あなたがしなければならないことは
package main
import (
"net/http"
)
func main() {
http.Handle("/", http.FileServer(http.Dir("./static")))
http.ListenAndServe(":3000", nil)
}
という名前のフォルダに静的ファイルがあると仮定して
static
という名前のフォルダにあると仮定します。
もしそれがフォルダの中の
static
にある場合、あなたは
index.html
を呼び出すファイル
http://localhost:3000/
を呼び出すと、利用可能なすべてのファイルをリストする代わりに、そのインデックスファイルをレンダリングすることになります。
さらに、そのフォルダ内の他のファイルを呼び出すと (例えば
http://localhost:3000/clients.html
を呼び出すと、ブラウザ (少なくとも Chrome、Firefox、Safari :) によって適切にレンダリングされたそのファイルが表示されます)。
UPDATE: "/" 以外の url からファイルを提供します。
ファイルを提供する場合、例えば、フォルダ
./public
という URL の下に
localhost:3000/static
あなたは
を使用します。
:
func StripPrefix(prefix string, h Handler) Handler
のようにします。
package main
import (
"net/http"
)
func main() {
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("./public"))))
http.ListenAndServe(":3000", nil)
}
そのおかげで
./public
にあるすべてのファイルが
localhost:3000/static
がない場合
http.StripPrefix
関数がない場合、もしファイルにアクセスしようとすると
localhost:3000/static/test.html
にアクセスしようとすると、サーバはそれを
./public/static/test.html
これは、サーバーがURI全体をファイルへの相対パスとして扱うからです。
幸いなことに、組み込み関数で簡単に解決できます。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] サーバーでSSLが有効になっていない
-
[解決済み] interface{}をint型に変換する
-
[解決済み] Goでスライスを逆に反復処理する方法はありますか?
-
[解決済み] Goプログラムで静的リソースをバンドルする最良の方法は何ですか?
-
[解決済み] スライスを変数入力として渡すには?
-
[解決済み] Goのargv[0]に相当するものは何ですか?
-
[解決済み] テンプレートでマップを繰り返し処理する
-
[解決済み] Goエラー処理テクニック【終了しました
-
[解決済み] 複数のファイルからなるGoプログラムをコンパイルするには?
-
[解決済み] チャンネルを読まずに閉じたかどうかを確認する方法は?