2016-06-29 10 views
3

私は第19章の例に沿って、の道を進んでいます。Golang http.ResponseWriterを使用してHTML文字列をWebページとして表示するには?

これは本とそのスクリーンショットによると、私の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) 
} 

の内容ですが、私は私のブラウザでレンダリングされた有効なフォームが表示されるはずです。しかし、今は生の文字列しか見ることができません。

私は非常に新しいので、例が書かれて以来、言語が大きく進化したかどうかはわかりません。私の行くバージョンはgo version go1.6.2 linux/amd64であり、本書は2012年に書かれていると思います。

ブラウザでフォームとしてレンダリングするにはどのように変更しますか?ありがとう。

+1

AddForm'は、完全なHTMLページではありません '、それだけでフォームフラグメントですが設定されます実行します。さらに、 'Content-Type:text/plain'を返しています。この例には何かありますか?これはGo std libと一緒に働いたことはありません。 – JimB

+0

この本は[ここ](https://ia800702.us.archive.org/8/items/TheWayToGo/The_Way_To_Go.pdf)であり、ページ517で読んでいます。他のコードもありますが、ここではHTMLとはまったく関係ありません。コードはzipファイルのchapter19/goto_v1/main.goの[ここ](https://sites.google.com/site/thewaytogo2012/Downhome/Topic3)です。 – cookieisaac

答えて

4

現在のバージョンのgolangでは、http.ResponseWriterのデフォルトのContent-Typeはtext/plainであり、手動でコンテンツタイプをtext/htmlに設定すると、期待どおりに動作しています。

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

HTMLテンプレートを使用した方が良いでしょう。テンプレートはあなたのHTMLもエラーをチェックします。

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

では、あなたが私の例では、標準出力のinstaed wを使用した場合、コンテンツタイプは自動的に

関連する問題