uokadaの見逃し三振は嫌いです

ここで述べられていることは私の個人的な意見に基づくものであり、私が所属する組織には一切の関係はありません。

GoでHello Worldサーバーを作る

いまさらな感じですがHello Worldサーバーをhttp.ServeMux使ってやる方法で書いてみた。

package main

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

type BaseHandler struct {
    Name string
}

func (bh *BaseHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    if bh.Name != "" {
        fmt.Fprint(w, "Hey "+bh.Name+"!")
    } else {
        fmt.Fprint(w, "Hey World!")
    }
}

var name string

func init() {
    flag.StringVar(&name, "name", "", "your name")
    flag.Parse()
}

func main() {
    mux := http.NewServeMux()
    bh := &BaseHandler{Name: name}
    mux.Handle("/hello", bh)

    addr := fmt.Sprintf(":%d", 8080)
    err := http.ListenAndServe(addr, mux)
    if err != nil {
        log.Fatal(err)
    }
}

http.ServeMux使ったほうがグローバル変数使ってパラメータ渡すようなことしなくて済むので依存関係少なめのコードがかけてオススメ

具体的に、DocumentRoot的なものを設定してそこからファイル渡すときなどはこれが便利な印象。

qiita.com