2016-05-17 1 views
0

私は経験豊富なプログラマですが、新しいことです。これが明白な質問であるか、またはよく歩く道であれば、事前に謝罪してください。私はまだ言語とそのセマンティクスで私の抱擁を得ています。go、手動でhttp.FileServerを呼び出すか、httpハンドラとは何ですか?

私は

  1. はリクエストの結果に基づいてHTTPリクエスト
  2. を調べていること、外出先でのWebサーバーを作成しようとしている、

特定静的フォルダを提供しています単純化された擬似コードが見えるもの

import (
    "io" 
    "net/http" 
    "fmt" 
    "strings" 
    "encoding/base64" 
) 

func examineRequest(request *http.Request) { 
    //looks at request header 
    if(request headers have one thing){ 
     return "foo" 
    } 
    return "bar" 
} 

func processRequest(responseWriter http.ResponseWriter, request *http.Request) { 
    folderToServe = examineRequest(request); 
    if folderToServe == "bar" { 
     //serve static files from the ./static/bar folder 

     //go freaks out if I try these 
     //http.Handle("/", http.FileServer(http.Dir("./static/bar")))  
     //http.FileServer(http.Dir("./static/bar")() 

    } 
    else if folderToServer == "foo" { 
     //serve static files from the ./static/foo folder 

     //go freaks out if I try these 
     //http.Handle("/", http.FileServer(http.Dir("./static/foo")))  
     //http.FileServer(http.Dir("./static/foo")() 
    } 
} 

func main(){ 
    http.HandleFunc("/", processRequest) 
    //http.Handle("/", http.FileServer(http.Dir("./static")))  
} 

経験のあるプログラマがすでに問題を発見している可能性があります。私はprocessRequestで検査を行っています。そのため、Handleを呼び出すのが遅すぎます - しかし、同じパスに対して複数のハンドルを登録したり、ネストされたハンドル呼び出しを処理したりすることはできません。

ハンドラは他の言語の匿名関数と似ているかもしれませんが、それを呼び出そうとしましたが、そのように行ってしまいました。

したがって、http.FileServer(http.Dir("./static"))の呼び出しから返されたハンドラを手動で呼び出す方法はありますか?

ここでも尋ねるのは正しい質問ですか?

httpモジュールのコンテキスト内のハンドラは正確には何ですか?

+1

静的なファイルを提供する方法を知るためのお勧めの質問+答え:1. [Goテンプレートにjsファイルを含める](http://stackoverflow.com/questions/28899675); 2. [golang webserverを使って、ウェブサイトのルートはファイルシステムにマップされます](http://stackoverflow.com/questions/28745161); 3. [なぜ静的ファイルにアクセスするためにhttp.StripPrefixを使用する必要がありますか?](http://stackoverflow.com/questions/27945310); 4. [Goでhttpの部分コンテンツを提供するにはどうすればいいですか] – icza

答えて

2

http.FileServer(http.Dir("./static/foo")).ServeHTTP(w, req)を使用してください。

//編集

http.FileServerは、順番にServerHTTP方法を提供http.Handlerを返します。

+0

ServeHTTPメソッドを呼び出す方法を知っていますか? –

+0

@AlanStormは編集を確認します。 – OneOfOne

+1

@AlanStorm言語の理解を深めるため、https://golang.org/doc/effective_go.htmlをご覧ください。 – OneOfOne

関連する問題