0
0
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

Goのnet/httpでサーバーのハンドラー処理を作ってみる

Last updated at Posted at 2024-06-30

はじめに

net/httpパッケージを使って、サーバーのハンドラー処理を書いてみた。

handler1、handler2、handler3、handler4、どれも書き方は若干違うが、最終的にhttp.Handle()が呼び出され、ルーティングが登録されるため同義となる。

http.Handle()の第2引数では、http.Handler型が指定されており、http.Handlerはインターフェイスで、ServeHTTPメソッドの実装を期待しているので、それを実装した型を入れてやると動く。

http.HandlerFunc()は、http.ResponseWriterと*http.Requestを引数に持つ関数が指定されており、実行するとhttp.HandlerインターフェイスのServeHTTPメソッドを実装した、http.HandlerFunc型になるので、それをhttp.Handle()に渡す。

package main

import (
	"net/http"
)

type handler3 struct{}

func (h *handler3) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	w.Write([]byte("Test Handler 3"))
}

func handler4(w http.ResponseWriter, r *http.Request) {
	w.Write([]byte("Test Handler 4"))
}

func main() {
	handler1 := func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("Test Handler 1"))
	}
	http.HandleFunc("/test1", handler1)

	handler2 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("Test Handler 2"))
	})
	http.Handle("/test2", handler2)

	handler3 := &handler3{}
	http.Handle("/test3", handler3)

	http.HandleFunc("/test4", handler4)

	http.ListenAndServe(":8080", nil)
}

動かしてみる

go run main.go

curl http://localhost:8080/test1
Test Handler 1%

curl http://localhost:8080/test2
Test Handler 2%

curl http://localhost:8080/test3
Test Handler 3%

curl http://localhost:8080/test4
Test Handler 4%

参考

0
0
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
0
0