Goでローカルサーバーを立てる
Goでは標準でnet/httpパッケージが用意されており、少ないコードでwebサーバーを立てることができます。画像のように、ローカルで簡単なCSSをつけた静的コンテンツを表示させてみたいと思います。
1.ディレクトリを作る
以下の構成でディレクトリを作っていきます。
$HOME/go_tutorial
- main.go
- static/
- - index.html
- - styles/
- - - style.css
ホームディレクトリ以下にに「go_tutorial」ディレクトリを作り、メインのコードを書くmain.goとコンテンツを入れるstaticディレクトリを配置します。
$ mkdir go_tutorial
$ cd go_tutorial
$ touch main.go
$ mkdir -p static/stylesheets
$ touch static/index.html static/stylesheets/styles.css
2.main.goとhtml・cssを用意する
package main
import (
"log"
"net/http"
)
func main() {
//ディレクトリを指定する
fs := http.FileServer(http.Dir("static"))
//ルーティング設定。"/"というアクセスがきたらstaticディレクトリのコンテンツを表示させる
http.Handle("/", fs)
log.Println("Listening...")
// 3000ポートでサーバーを立ち上げる
http.ListenAndServe(":3000", nil)
}
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>A static page</title>
<link rel="stylesheet" href="/stylesheets/styles.css">
</head>
<body>
<h1>Hellooooooooooooo</h1>
</body>
</html>
body {color: #c0392b}
##3.サーバーを立ち上げる
コードがかけたらmain.goを動かします。
$ go run main.go
その上で http://localhost:3000/
にアクセスすればコンテンツが表示されます。
ServeMuxとは何か
Goのhttpパッケージの文脈で、Servemuxという用語がよく出てきます。
・ServeMuxとは、HTTPリクエストに対するルーターです。URLのパターンにマッチするハンドラーを呼び出します。
・Muxというのはmultiplexor(直訳すると、「多重装置」)の略で、色々なパターンのURLリクエストに対して対応するハンドラーに振り分けます。
・ハンドラーはHTTPレスポンスヘッダーとボディを返します。
・DefalutServeMuxという用語もよく登場しますが、これはHTTPパッケージを使うときに最初に定義されているServemuxのことです。
##参考
Creating simple webserver with golang
https://tutorialedge.net/golang/creating-simple-web-server-with-golang/
Serving static sites with Go
https://www.alexedwards.net/blog/serving-static-sites-with-go
Understanding Go Standard Http Libraries : ServeMux, Handler, Handle and HandleFunc
https://rickyanto.com/understanding-go-standard-http-libraries-servemux-handler-handle-and-handlefunc/
A Recap of Request Handling in Go
https://www.alexedwards.net/blog/a-recap-of-request-handling