Goを勉強中です。c#以来の久しぶりのコンパイル言語にワクワクします。
「 A Tour of Go 」を一通りやって、何となく分かったような分からないような。
net/http
の練習でもしようと思い、Hello world!
サーバーをやったので、次にJSONを返す、簡単なウェブサーバーを作ってみようと思い立ちました。
それで、まずヘッダーをContent-type: application/json; charset=utf-8
に変えたいと思って探してみると、公式にサンプルがあります。それを元に簡単なコードを書きました。
go
1package main 2 3import ( 4 "net/http" 5 "fmt" 6) 7 8func main() { 9 http.HandleFunc("/test.json", 10 func(w http.ResponseWriter, r *http.Request) { 11 fmt.Printf("URL is %s\n", r.URL.String()) 12 w.Header().Set("Content-type:","application/json; charset=utf-8") 13 fmt.Fprintf(w, "{result: true}") 14 }, 15 ) 16 http.ListenAndServe(":8080", nil) 17} 18```ここで躓きました。 19 20[http.ResponseWriter](https://golang.org/pkg/net/http/#ResponseWriter)の`Header()`で返されるのが`Header`構造体であって、`*Header`というポインターではないのに、`w.Header().Set(~)`とヘッダーをセットしてあげると、ちゃんと親の`w`にも伝播するのは何故でしょうか? 21 22そもそも構造体&インターフェースが良く分かってないので、トンチンカンな質問かもしれませんが、Goに詳しい方々、何が起きているのか説明していただけないでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/03 01:00
2017/07/03 01:38
2017/07/03 01:53
2017/07/03 11:13