【Golang】同一ページ内の複数のPOSTメソッドを選択的に処理する方法
経緯
一つのページ内で複数のPOST
処理を選択的に実行したいと思ったものの、ハンドラ関数内での分岐をGET
かPOST
かだけでswitchしており、どう処理するか迷いました。
解決法
html
側の各input
要素に異なるname
属性を付け、Request.Method
で分岐後、さらにRequest.FormValue()
関数でどのinput
要素からPOST
されてきたかを、if
で分岐します。POST
されたフォームデータには使用されたinput
要素の連想配列しか含まれないため、POST
されていない処理が行われてしまう心配はありません。
・html form部分の記述
<form action="" method="post"> <p><input type="submit" value="処理1" name="process1"></p> </form> <form action="" method="post"> <p><input type="submit" value="処理2" name="process2"></p> </form>
サーバー側の記述
func SampleHandler(w http.ResponseWriter, r *http.Request) { switch r.Method { case "GET": //あればGET処理 case "POST": err := r.ParseForm() //FormValue関数だけ使う際は不要、r.Formの内容を使用したい場合はParseForm()を行う if err != nil { fmt.Println(err.Error()) } //FormValue()は引数で渡したキーに対応する値を返す if r.FormValue("process1") == "処理1" { //処理1の内容 fmt.Println(r.Form) //r.Formの内容は map[process1:[処理1]] } if r.FormValue("process2") == "処理2" { //処理2の内容 fmt.Println(r.Form) //r.Formの内容は map[process2:[処理2]] } } }