紙芝居用の簡易 Web サーバを Go 言語で書く

no extension

3年ほど前に紙芝居(静的な HTML ファイルを表示するだけの簡単なお仕事)用の簡易 Web サーバを node.js で組んだのだが

今は Go 言語が書けるし,今回は Go 言語で組むことにした。 こんな感じ。

package main

import (
	"flag"
	"fmt"
	"net/http"
	"os"
)

func main() {
	port := flag.Int("p", 3000, "port number")
	host := flag.String("host", "", "hostname")
	path := "./html"
	flag.Parse()
	if flag.NArg() > 0 {
		path = flag.Arg(0)
	}
	addr := fmt.Sprintf("%s:%d", *host, *port)

	if len(*host) == 0 {
		fmt.Printf("Open http://localhost%s/\n", addr)
	} else {
		fmt.Printf("Open http://%s/\n", addr)
	}
	fmt.Println("Press ctrl+c to stop")
	http.Handle("/", http.FileServer(http.Dir(path)))
	if err := http.ListenAndServe(addr, nil); err != nil {
		fmt.Fprintln(os.Stderr, err)
	}
}

これを適当なファイル(たとえば mock-up.go)に保存して

$ go build mock-up.go

とすればよい。 標準パッケージのみ使ってるので他所からパッケージを取ってくる必要はない。 めっさ簡単。 ブラボー!

起動するとカレントディレクトリ直下の html フォルダ以下のファイルを表示できる。

$ mock-up
Open http://localhost:3000/
Press ctrl+c to stop

この状態で任意のブラウザから http://localhost:3000/ へアクセスすればよい。 停止する場合は Ctrl-C 押下でおk。

ポート番号を変える場合は -p オプションでポート番号を指定する。

$ mock-up.exe -p 8080
Open http://localhost:8080/
Press ctrl+c to stop

バインドするホスト名を指定する場合は -host オプションを使う。

$ mock-up.exe -p 8080 -host hostname
Open http://hostname:8080/
Press ctrl+c to stop

ルートフォルダを指定することも可能。

$ mock-up.exe -p 8080 -host hostname C:\path\to\htmlpub
Open http://hostname:8080/
Press ctrl+c to stop

存在しないフォルダを指定してもエラーにならず,アクセスしても 404 が返るだけ。 Directory traversal 脆弱性は問題ないと思う。 こっそり他人の PC に仕込んだりしないように(笑)

ブックマーク

参考図書

photo
プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
Alan A.A. Donovan Brian W. Kernighan 柴田 芳樹
丸善出版 2016-06-20
評価

スターティングGo言語 (CodeZine BOOKS) Go言語によるWebアプリケーション開発 Kotlinスタートブック -新しいAndroidプログラミング Docker実戦活用ガイド グッド・マス ギークのための数・論理・計算機科学

著者のひとりは(あの「バイブル」とも呼ばれる)通称 “K&R” の K のほうである。

reviewed by Spiegel on 2016-07-13 (powered by G-Tools)

photo
Go言語によるWebアプリケーション開発
Mat Ryer 鵜飼 文敏
オライリージャパン 2016-01-22
評価

プログラミング言語Go マイクロサービスアーキテクチャ nginx実践入門 (WEB+DB PRESS plus) 改訂2版 基礎からわかる Go言語 サーバ/インフラエンジニア養成読本 DevOps編 [Infrastructure as Code を実践するノウハウが満載! ] (Software Design plus)

日本語監訳者による解説(付録 B)が意外に役に立つ感じ。 Web アプリケーションだけでなく,サーバサイドで動く CLI アプリへの言及もある。

reviewed by Spiegel on 2016-03-13 (powered by G-Tools)