質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

1回答

1063閲覧

golangでpostしたデータがfmt.Printlnで取得できない理由を教えてください。

UekiKouji

総合スコア121

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

1クリップ

投稿2017/09/16 01:58

いつもお世話になります。postしたデータがfmt.Printlnで取得できないです。その理由が知りたいです。
よろしくお願いします。

login.html

<html> <head> <title></title> </head> <body> <form action="/login" method="post"> ユーザ名:<input type="text" name="username"> パスワード:<input type="password" name="password"> <input type="submit" value="ログイン"> </form> </body> </html>

server.go

package main import ( "fmt" "html/template" "net/http" "strings" ) func sayhelloName(w http.ResponseWriter, r *http.Request) { r.ParseForm() fmt.Println(r.Form) fmt.Println("path", r.URL.Path) fmt.Println("scheme", r.URL.Scheme) fmt.Println(r.Form["url_long"]) for k, v := range r.Form { fmt.Println("key:", k) fmt.Println("val:", strings.Join(v, "")) } fmt.Fprintf(w, "Hello astaxie!") } func login(w http.ResponseWriter, r *http.Request) { fmt.Println("method:", r.Method) if r.Method == "GET" { t, err := template.ParseFiles("login.html") if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } t.Execute(w, nil) } else { fmt.Println("username:", r.PostForm["username"]) fmt.Println("password:", r.PostForm["password"]) } } func main() { server := http.Server{ Addr: "127.0.0.1:9000", } http.HandleFunc("/", sayhelloName) http.HandleFunc("/login", login) server.ListenAndServe() }

イメージ説明

イメージ説明
結果です。
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

フォームデータを取得するには、req.ParseForm() を呼び出してから PostForm にアクセスします。

go

1err := req.ParseForm() 2if err != nil { 3 // エラー処理 4} 5fmt.Println(req.PostForm["username"])

この手間を一度で行ってくれるのが FormValue() です。

go

1fmt.Println("username:", r.FormValue("username")) 2fmt.Println("password:", r.FormValue("password"))

なお、PostFormValue() という関数もありますが、違いは POST 時の Query Parameter も透過的に取得できるのが FormValue()、POST Body の値だけ取りたい場合には PostFormValue() を使います。

投稿2017/09/16 02:17

編集2017/09/16 05:43
mattn

総合スコア5030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

UekiKouji

2017/09/16 05:21

ありがとうございます。非常助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問