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

no extension
  1. 紙芝居用の簡易 Web サーバを Go 言語で書く ←イマココ
  2. 紙芝居用の簡易サーバを書く【Go 1.16 版】
  3. 紙芝居用の簡易 Web サーバを Go 言語で書く【叱られ編】

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
アラン・ドノバン (著), ブライアン・カーニハン (著), 柴田芳樹 (著)
丸善出版 2016-06-20 (Release 2021-07-13)
Kindle版
B099928SJD (ASIN)
評価     

Kindle 版出た! 一部内容が古びてしまったが,この本は Go 言語の教科書と言ってもいいだろう。感想はこちら

reviewed by Spiegel on 2021-05-22 (powered by PA-APIv5)

photo
Go言語によるWebアプリケーション開発
Mat Ryer (著), 鵜飼 文敏 (監修), 牧野 聡 (翻訳)
オライリージャパン 2016-01-22
大型本
4873117526 (ASIN), 9784873117522 (EAN), 4873117526 (ISBN)
評価     

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

reviewed by Spiegel on 2019-08-12 (powered by PA-APIv5)