Open dandk105 opened 11 months ago
handler内の処理が現在複雑になっていてそれぞれのメソッド毎に行う処理をこのまま追加していくと 処理が長く過ぎて読みにくい関数になってしまう そのため、handler内部の処理を分解して、それぞれのメソッド毎に必要な処理について記載をする必要がある
厚くなっている処理の例
func getUserDataHandler(w http.ResponseWriter, r *http.Request, db *sql.DB) { // GETメソッドを受け入れる if r.Method != http.MethodGet { http.Error(w, "Only GET method is supported", http.StatusMethodNotAllowed) return } name := r.URL.Query().Get("name") // "name"が空の時はデフォルトのユーザー情報を返す所謂疎通確認用の処理 // switch文で書いた方が良さそう if name == "" { var user User user.Name = "World" user.Birthday = time.Now() user.ID = "1" jsonresponse, err := json.Marshal(user) if err != nil { log.Print(err) http.Error(w, err.Error(), http.StatusInternalServerError) } w.Write(jsonresponse) } else { // データベースからデータを取得する // TODO: URLのクエリーによって取得するデータを変えるようにする // 現在はUSERSテーブルの全てのデータを取得しているからよろしくない rows, err := db.Query("SELECT * FROM USERS WHERE NAME = $1", name) if err != nil { log.Print(err) } defer rows.Close() var user User for rows.Next() { if err := rows.Scan(&user.ID, &user.Name, &user.Birthday); err != nil { log.Print(err) } } if err := rows.Err(); err != nil { log.Print(err) } jsonresponse, err := json.Marshal(user) if err != nil { log.Print(err) http.Error(w, err.Error(), http.StatusInternalServerError) } log.Printf("%s request: %s from %s", r.Method, r.RequestURI, r.RemoteAddr) // レスポンスを返す w.Write(jsonresponse) } }
handler内の処理が現在複雑になっていてそれぞれのメソッド毎に行う処理をこのまま追加していくと 処理が長く過ぎて読みにくい関数になってしまう そのため、handler内部の処理を分解して、それぞれのメソッド毎に必要な処理について記載をする必要がある
厚くなっている処理の例