net/httpの所で紹介しましたが、gorilla/muxを使うともう少し高度なことが簡単にできます。
下記は、/userでアクセスされたとき、指定した関数を呼び出すよう書いてみた例です。
package main
import (
"fmt"
"github.com/gorilla/mux"
"net"
"net/http"
)
func getUserAPI(w http.ResponseWriter, req *http.Request) {
fmt.Fprintf(w, "get user API")
}
func main() {
r := mux.NewRouter()
r.HandleFunc("/user", getUserAPI)
l, _ := net.Listen("tcp", ":9000")
http.Serve(l, r)
}
muxの基本的な使い方を見ていきましょう。
r := mux.NewRouter()
Routerオブジェクトを作ります。このオブジェクトがルーティング情報をまとめて管理してくれます。
r.HandleFunc("/user", getUserAPI)
net/httpの時と同じですね。/userでリクエストがきたら、getUserAPIという関数を呼び出すよう設定します。関数の形はnet/httpで使ったものと同じです。
l, _ := net.Listen("tcp", ":9000")
http.Serve(l, r)
今回は、ListenAndServeでまとめて開始するのではなく、別々にしてみました。Listen()関数でListenerオブジェクトを取得し、Serve関数で開始します。ここでRouterオブジェクトを渡すことで、ルーティングを適切に行います。