2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Goでnet/httpしてみる

Last updated at Posted at 2018-12-02

#目的
Goでhello worldの学習が完了したので、次にWebアプリ作ってみたいなーと思っていたところ、
net/httpなるパッケージを発見し早速動かしてみました。今回使用するコードはGithub上にございます。

#net/httpとは?
Goのパッケージです。ドキュメントはこちら
その名の通り、HTTPクライアントとサーバーの機能を実装するためのパッケージです。

#hello world!
まずはまずはhello worldですよね。こちらの記事を参考にさせていただきました。

server1.go
package main

import (
  "fmt"
  "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintf(w, "Hello, World")
}

func main() {
  http.HandleFunc("/", handler) // ハンドラを登録してウェブページを表示させる
  http.ListenAndServe(":8080", nil)
}

server1.goを実行します。

go run server1.go

localhost:8080にアクセスして、、、やりました、hello world!!
スクリーンショット 2018-12-01 20.10.02.png

#解説
一体どうなっているのか、ドキュメントを参考にコードをみていきます。

http.HandleFunc("/", handler)

あたえられたURLパターン(第1引数)に対して、ハンドラ(第2引数)をDefaultServeMuxに登録します。(DefaultServeMuxは後ほど出てきます)
ハンドラとは、何らかのアクションをトリガーに実行される関数です。
つまり、第1引数で定義したパターンでリクエストが来たら、第2引数で定義したハンドラを呼び出すよ。ということです。

###第1引数 "/"
トリガーとなるURLパターンを登録します。試しに/helloに変更してみます。
/だと見つかりませんね。
スクリーンショット 2018-12-01 20.35.29.png
/helloだと見つかりました。
スクリーンショット 2018-12-01 20.35.37.png

###第2引数 handler
実行されるハンドラです。試しに2パターンセットしてみます。

server2.go
package main

import (
  "fmt"
  "net/http"
)

func handler1(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintf(w, "I am handler1")
}

func handler2(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintf(w, "I am handler2")
}

func main() {
  http.HandleFunc("/hander1", handler1)
  http.HandleFunc("/hander2", handler2)
  http.ListenAndServe(":8080", nil)
}

/hander1の場合は(l抜けちゃいました)、handler1というハンドラが呼び出されるので、handler1と表示されます。
スクリーンショット 2018-12-01 20.48.55.png

/hander2の場合は(l抜けちゃいました)、hander2というハンドラが呼び出されるので、handler2と表示されます。
スクリーンショット 2018-12-01 20.49.02.png

##http.ListenAndServe(":8080", nil)
Listenするアドレスと、ハンドラーを定義しています。

###第1引数 ":8080"
TCPのネットワークアドレスを設定します。今回のようにhost部分の記載が省略されると、使用可能なインターフェースを利用するため、localhostが使用されています。:以降はポートですね。
今回の場合、localhostの8080でListenすることになります。

###第2引数 nil
ハンドラーを設定します。
nilを設定すると、DefaultServeMuxが使用されます。(HandleFuncで設定したやつです)

##func handler(w http.ResponseWriter, r *http.Request)
ハンドラーを定義します。

###第1引数 w ResponseWriter
HTTPレスポンスを構成する際に使用されます。

###第2引数 r *http.Request
サーバーが受け取ったHTTP Requestのことです。*はポインタです。

##fmt.Fprintf(w, "I am handler1")
ResponseWriterであるwに"I am handler1"を書き込んでいます。

#まとめ
net/httpのhello worldでした。コードはGithub上にございます。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?