Go言語でフォームを操作~post編~

Share on:

この記事は約3 分で読めます。

目次

前回WEBアプリのスタートとしてブラウザに文字列を表示するプログラムをGo言語で書いてみました。

今回は、HTMLのフォームを利用してpostされたテキストをブラウザに表示するプログラムを書いてみたいと思います。

フォームの操作はWEBアプリの中核をなす機能です。

本記事をマスターすれば、WEBアプリの作成はほぼ思い通りにできるようになるといっても過言ではありません。

クライアントとの間の入出力をマスターし、あとはデータベース操作やフロントエンド開発(今後記載予定)をマスターすれば、おおよそのWEBアプリが作成できることになると思います。

フォーム操作プログラム main.go

 1package main
 2
 3import (
 4	"html/template"
 5	"log"
 6	"net/http"
 7)
 8
 9func index(w http.ResponseWriter, r *http.Request) {
10	t := template.Must(template.ParseFiles("index.html"))
11	dat := struct {
12		Message string
13	}{
14		Message: "ここに送信したテキストが表示されます!",
15	}
16
17	if err := t.ExecuteTemplate(w, "index.html", dat); err != nil {
18		log.Fatal(err)
19	}
20}
21
22func result(w http.ResponseWriter, r *http.Request) {
23
24	r.ParseForm()
25	s := r.FormValue("word")
26	t := template.Must(template.ParseFiles("result.html"))
27	dat := struct {
28		Message string
29	}{
30		Message: s,
31	}
32
33	if err := t.ExecuteTemplate(w, "result.html", dat); err != nil {
34		log.Fatal(err)
35	}
36}
37
38func main() {
39	server := http.Server{
40		Addr: ":55555",
41	}
42	http.HandleFunc("/", index)
43	http.HandleFunc("/result", result)
44	server.ListenAndServe()
45}

ソースコードは前回の記事に追記した形になっています。

func indexは前回のままです。

新しく追記したものは、func resultfunc main内の1行です。

func resultはフォームを送信したあとに呼び出される関数です。

フォーム送信後の遷移URLはlocalhost:55555/resultになります。

これらを制御しているのがhttp.HandleFunc("/result", result)の箇所になります。

postされた値を取得する

r.ParseForm()を行うことでs := r.FormValue("word")によりフォーム名wordに入力された値を取得することができます。

ここで重要なのはリクエストされたrに対してParseForm()することです。

HTMLテンプレート

  • index.html
 1<html>
 2    <head></head>
 3    <body>
 4        <form method="post" action="/result">
 5            <input type="text" name="word">
 6            <input type="submit" name="submit" value="送信">
 7        </form>
 8        {{ .Message }}
 9    </body>
10</html>
  • result.html
 1<html>
 2    <head></head>
 3    <body>
 4        <form method="post" action="/result">
 5            <input type="text" name="word">
 6            <input type="submit" name="submit" value="送信">
 7        </form>
 8        {{ .Message }}が入力されました!
 9    </body>
10</html>

今回はpost前とあとの実行結果が変わるように2つのテンプレートを用意しましたが、1つのテンプレートでやりくりすることも可能です。

実行結果

無事にフォームに入力された値が表示されましたでしょうか?

フォームに入力された値が取得できると、その値に対する処理を施すことで、立派なWEBアプリが出来上がります。