ServeMuxを使用するのは正しいです。ServeMuxのgodocには、その使用方法に関する詳細情報があります。
標準のhttpパッケージには、最上位のHandle関数を使用して操作できるDefaultServeMuxがあります。たとえば、単純な仮想ホストアプリケーションは次のようになります。
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, world!")
})
http.HandleFunc("qa.example.com/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, improved world!")
})
http.ListenAndServe(":8080", nil)
}
この例では、qa.example.comへのすべてのリクエストが2番目のハンドラーにヒットし、他のホストへのすべてのリクエストが最初のハンドラーにヒットします。