一気に気温が上がったり、下がったり大変
安定せんかな〜
実装1(シンプルな構造体)
main1.go
package main import ( "fmt" "net/http" "log" "github.com/gorilla/mux" "encoding/json" ) // 単純な構造体 type Data1 struct { Title string `json:"title"` Message string `json:"message"` Status int `json:"status"` } func main(){ // ルーティング router := mux.NewRouter() // URL別設定 router.HandleFunc("/sample1", func(w http.ResponseWriter, r *http.Request){ // 構造体を定義 var data1 = Data1{} data1.Title = "sample1" data1.Message = "hello, sample1" data1.Status = 100 // jsonエンコード outputJson, err := json.Marshal(&data1) if err != nil { panic(err) } // jsonヘッダーを出力 w.Header().Set("Content-Type", "application/json") // jsonデータを出力 fmt.Fprint(w, string(outputJson)) // log log.Print(r.URL.Path) }) // ハンドル割当 http.Handle("/", router) // log log.Print("localhost:9001") // ポート http.ListenAndServe(":9001", nil) }
↓
実装2(構造体に配列を含む)
main2.go
package main import ( "fmt" "net/http" "log" "github.com/gorilla/mux" "encoding/json" ) // 配列を含む構造体 type Data2 struct { Title string `json:"title"` Message string `json:"message"` Status int `json:"status"` List map[string]Item `json:"list"` } // 構造体の配列Item type Item struct { Name string `json:"name"` Age int `json:"age"` } func main(){ // ルーティング router := mux.NewRouter() // URL別設定 router.HandleFunc("/sample2", func(w http.ResponseWriter, r *http.Request){ // 構造体を定義 var data2 = Data2{} data2.Title = "sample2" data2.Message = "hello, sample2" data2.Status = 200 data2.List = map[string]Item{} data2.List["test1"] = Item{Name:"taro", Age: 10} data2.List["test2"] = Item{Name:"hanako", Age: 18} data2.List["test3"] = Item{Name:"pochi", Age: 50} // jsonエンコード outputJson, err := json.Marshal(&data2) if err != nil { panic(err) } // jsonヘッダーを出力 w.Header().Set("Content-Type", "application/json") // jsonデータを出力 fmt.Fprint(w, string(outputJson)) // log log.Print(r.URL.Path) }) // ハンドル割当 http.Handle("/", router) // log log.Print("localhost:9001") // ポート http.ListenAndServe(":9001", nil) }
↓
なんとかできました。
RSSの場合にもあったけど
type Data2 struct { Title string `json:"title"` Message string `json:"message"` Status int `json:"status"` List map[string]Item `json:"list"` }
右の方にjsonとか指定したらその名前になるので小文字にしたい場合などは役に立ちます…というかきまりみたいな感じかな…
テキトーにググったけどそれっぽいパッケージが見つからなかったのでこれでいいはず