【Golang】同一ページ内の複数のPOSTメソッドを選択的に処理する方法

経緯

一つのページ内で複数のPOST処理を選択的に実行したいと思ったものの、ハンドラ関数内での分岐をGETPOSTかだけで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]]

        }
    }
}