2016-03-24 20 views
0

Golang'daki çevrimiçi video kursunu takip etmeye çalışıyorum ve statik html dosyaları sunarken bir hata alıyorum., golang'de statik html dosyaları sunamaz

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))) 
    } 
} 

Benim klasör yapısı looks like this.

+0

path: = "public /" + req.URL.Yolu yolu yanlış ayarlanmış. En basit yol, halk için mutlak köklü yol olacaktır. – Uvelichitel

+0

ama eğitmen işe yarıyor gibi görünüyor, lütfen bana bağlantıyı nasıl doğru yapacağınızı söyler misiniz? – location

+3

@Shavkat, çalıştırdığınız dosyayı bulunduğunuz yerden mi çalıştırıyorsunuz? BTW eğitmeninizin kodu gerçekten idiyom değildir. –

cevap

0

Klasörünüzün yapısına bağlı olarak, path := "../public/" + req.URL.Path'a ihtiyacınız olduğunu tahmin edeceğim. Uygulamanız bin dizininden çalıştırılıyor, böylece doğrudan bir kardeş dizinine gidemiyorsunuz, .. numaralı telefona ihtiyacınız olacak ve public'un aslında bir seçenek olduğu bir dizinin dışına çıkacaksınız.

+0

olsun hiç dosya bulamadı sayfa 404 bulunamıyor – location

+0

@Shavkat 'bin' içinde veya birşey bulamayacaksınız bin/public' çünkü bu klasör mevcut değil. '../ public' içine bakmak gerekiyor. Bu veya okunan çalışmaların geçerli çalışma dizini, okunduğunda, bu durumda, CWD'nizin mutlak bir yolunu/sonucunu deneyip, oradan yolunuzu belirlediğini varsaydığım gibi, "bin" değil. Tek sorun, yolunuzun ** kesinlikle ** yanlış olmasıdır. – evanmcdonnal

İlgili konular