[解決済み] Goプログラムで静的リソースをバンドルする最良の方法は何ですか?
質問
開発者のマシンでアプリケーションやウェブサービスをデバッグするためのツールとして使用することを目的として、Goで小さなウェブアプリケーションに取り組んでいます。このプログラムへのインターフェースは、HTML だけでなく、いくつかの JavaScript (機能用)、画像、CSS (スタイル用) を含むウェブページです。私はこのアプリケーションをオープンソースにすることを計画しているので、ユーザーは単にMakefileを実行するだけで、すべてのリソースが必要な場所に移動するようになるはずです。しかし、私はまた、できるだけ少ないファイル/依存関係で実行ファイルを単純に配布することができるようにしたいと思います。 HTML/CSS/JSを実行ファイルにバンドルする良い方法はないでしょうか、そうすればユーザーは1つのファイルだけをダウンロードして心配する必要があります。
今、私のアプリでは、静的ファイルを提供することは、少し次のようになります。
// called via http.ListenAndServe
func switchboard(w http.ResponseWriter, r *http.Request) {
// snipped dynamic routing...
// look for static resource
uri := r.URL.RequestURI()
if fp, err := os.Open("static" + uri); err == nil {
defer fp.Close()
staticHandler(w, r, fp)
return
}
// snipped blackhole route
}
リクエストされたファイルが静的ディレクトリに存在する場合、ハンドラを起動し、単にファイルを開いて、良い
Content-Type
を設定しようとするだけです。私の考えは、これが実際のファイルシステムに基づく必要がある理由はないということです。コンパイルされたリソースがある場合、私は単にリクエスト URI によってインデックスを作成し、そのようにそれらを提供することができます。
これを行う良い方法がない場合、またはこれを行うことによって私が間違った木を吠えている場合、私に知らせてください。私はただ、エンドユーザーが、管理するためにできるだけ少ないファイルを評価するだろうと考えただけです。
よりも適切なタグがあるのであれば go よりも適切なタグがあれば、遠慮なく追加するか、私に知らせてください。
どのように解決するのですか?
go-bindataパッケージは、あなたが興味を持っているものである可能性があるように見えます。
https://github.com/go-bindata/go-bindata
これは、任意の静的ファイルをコードに埋め込むことができる関数呼び出しに変換することができ、呼び出されたときにファイルの内容のバイトスライスを返します。
関連
-
[解決済み】Goで空の文字列をテストする最良の方法は何ですか?
-
[解決済み] GoからMySQLに接続するおすすめの方法は?
-
[解決済み] interface{}の意味は?
-
[解決済み] time.Sleepを使わずにすべてのゴルーチンが終了するのを待つには?
-
[解決済み] intをint64に変換するには?
-
[解決済み] response.Bodyを閉じないとどうなりますか?
-
[解決済み] オブジェクトのプロパティを二重引用符で囲んで使用するには?
-
[解決済み] GolangでMkdirを使ってネストされたディレクトリを作成するには?
-
[解決済み] 単一値コンテキストにおける複数値
-
[解決済み] reflectを使用して、構造体フィールドの値を設定するにはどうすればよいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] time.Sleepを使わずにすべてのゴルーチンが終了するのを待つには?
-
[解決済み] response.Bodyを閉じないとどうなりますか?
-
[解決済み] ゴルーチンの停止方法
-
[解決済み] Goを使って大きなファイルを効率よくダウンロードするにはどうしたらいいですか?
-
[解決済み] スライスを宣言するのか、スライスを作るのか?
-
[解決済み] オブジェクトのプロパティを二重引用符で囲んで使用するには?
-
[解決済み] GolangでMkdirを使ってネストされたディレクトリを作成するには?
-
[解決済み] 単一値コンテキストにおける複数値
-
[解決済み] GoのToString()関数
-
[解決済み] マップから構造体への変換