2016-03-24 9 views
0

golangのオンラインビデオコースに従おうとしていますが、静的なHTMLファイルを提供する際にエラーが発生しています。はgolangの静的なhtmlファイルを扱うことができません

package main 

import (
    "io/ioutil" 
    "net/http" 
) 

func main() { 
    http.Handle("/", new(MyHandler)) 
    http.ListenAndServe(":8000", nil) 
} 

type MyHandler struct { 
    http.Handler 
} 

func (this *MyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { 
    path := "public/" + req.URL.Path 
    data, err := ioutil.ReadFile(string(path)) 

    if err == nil { 
     w.Write(data) 
    } else { 
     w.WriteHeader(404) 
     w.Write([]byte("404 - " + http.StatusText(404))) 
    } 
} 

マイフォルダ構造 looks like this

+0

パス:= "public /" + req.URL.Pathパスが正しく設定されていません。最も単純な方法は、パブリックのための絶対的な根本的な道であろう。 – Uvelichitel

+0

しかしインストラクターが働いているようですが、正しい方法を教えてください。 – location

+3

@Shavkatあなたはあなたがあなたがいると思う場所から実行可能ファイルを実行していますか?あなたのインストラクターのコードは本当に非観想的です。 –

答えて

0

あなたのフォルダ構造へのリンクに基づいて、私はpath := "../public/" + req.URL.Pathが必要であると推測します。あなたのアプリケーションはbinディレクトリから実行されているため、兄弟ディレクトリに直接行くことはできません。があり、実際にはpublicという1つのディレクトリから外出する必要があります。

+0

ファイルが見つからない場合でもホームページに404が見つかりません – location

+0

@Shavkatよく 'bin'または'そのフォルダが存在しないため、「bin/public'」と表示されます。 '../public'を見る必要があります。その時、またはアプリケーションの現在の作業ディレクトリは読み込み時には 'bin'ではありません。この場合、絶対パスを試してみるか、あなたのCWDが何であるか把握してそこからあなたのパスを作りましょう。ここでの唯一の問題は、あなたの道は間違いなく**間違っているということです。 – evanmcdonnal