Goでルーティングを書いてみた(この前やったのをもうちょっとマシにした)。

func main() {

	initDB()

	http.HandleFunc("/", rootHandler)
	http.HandleFunc("/users", userHandler)
	fmt.Println("listnening...")
	http.ListenAndServe(":"+os.Getenv("PORT"), nil)
}

usersHandlerみたいなものを作ってみた。

中身はこんな感じで、userHandlerの方はクエリがなければ全部取ってきて名前だけを返す。

func rootHandler(res http.ResponseWriter, req *http.Request) {
	fmt.Fprintln(res, "Hello!!")
}
func userHandler(res http.ResponseWriter, req *http.Request) {
	m, _ := url.ParseQuery(req.URL.RawQuery)
	if len(m) == 0 {
		t := ""
		us := loadAllUsers()
		for _, u := range us {
			t += u.Name + "\n"
		}
		fmt.Fprintln(res, t)
	} else {
		user := loadUser(m["user_name"][0])
		fmt.Fprintln(res, user.Name)
	}
}

Goのfor文を書く時はrangeが便利。Swiftで言うところのenumrated()と同じでインデックスと要素を返してくれる。_で変数を捨てられるところもSwiftと一緒で覚えやすかった。

今日やった方法が良いのかは分からないけど、ひとまずできた。