2016-06-29 5 views
3

Ich folge dem Beispiel in Kapitel 19 von Der Weg zu gehen. Wie HTML-String als eine Webseite mit Golang http.ResponseWriter anzuzeigen?

Dies ist der Inhalt meiner main.go

package main 

import (
    "fmt" 
    "net/http" 
) 

const AddForm = ` 
<form method="POST" action="/add"> 
URL: <input type="text" name="url"> 
<input type="submit" value="Add"> 
</form> 
` 

func main() { 
    http.HandleFunc("/add", Add) 
    http.ListenAndServe(":8080", nil) 
} 

func Add(w http.ResponseWriter, r *http.Request) { 
    url := r.FormValue("url") 
    if url == "" { 
     fmt.Fprint(w, AddForm) 
     return 
    } 
    key := "Placeholder" 
    fmt.Fprintf(w, "http://localhost:8080/%s", key) 
} 

Nach dem Buch und seinen Screenshot, ich sollte eine gültige Form gebracht in meinem Browser sehen. Aber im Moment kann ich nur die rohe Saite sehen.

Ich bin sehr neu zu gehen, also bin ich mir nicht sicher, ob sich die Sprache seit der Entstehung des Beispiels stark entwickelt hat. Meine Go-Version ist go version go1.6.2 linux/amd64 und ich denke, das Buch wurde 2012 mit einer älteren Version von Go geschrieben.

Wie ändere ich es, um es als ein Formular im Browser zu rendern? Vielen Dank.

+1

eingestellt werden würde 'AddForm' ist keine vollständige HTML-Seite, es ist nur die Form Fragment. Außerdem geben Sie 'Content-Type: text/plain' zurück. Gibt es mehr zum Beispiel? Dies hätte mit der Go-Std-Lib nie funktioniert. – JimB

+0

Das Buch ist [hier] (https://ia800702.us.archive.org/8/items/TheWayToGo/The_Way_To_Go.pdf) und lesen auf Seite 517. Es gibt einige andere Code, aber definitiv nicht verwandt mit html rendern hier. Der Code ist [hier] (https://sites.google.com/site/thewaytogo2012/Downhome/Topic3) in der Zip-Datei in Kapitel 19/goto_v1/main.go – cookieisaac

Antwort

4

Nach dem Lesen des Dokuments, in der aktuellen Version von Golang, hat http.ResponseWriter einen Standard-Content-Typ wie text/plain, und nach dem manuellen Festlegen des Inhaltstyps wie text/html, die Dinge funktionieren wie erwartet.

if url == "" { 
    w.Header().Set("Content-Type", "text/html; charset=utf-8") 
    fmt.Fprint(w, AddForm) 
    return 
} 
0

Wenn Sie HTML-Vorlagen verwenden, ist es besser. Vorlage überprüft Ihren HTML-Code auf Fehler.

https://play.golang.org/p/l9bUoWC4PZ

In ausführen, wenn Sie instaed von stdout verwendet w in meinem Beispiel der Inhaltstyp automatisch

Verwandte Themen