1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package main
- import (
- "flag"
- "fmt"
- "log"
- "net"
- "net/http"
- "os"
- "strings"
- "time"
- )
- var portFlag = flag.String("port", "12345", "server port")
- var genFlag = flag.Bool("gen", false, "HTML generation mode?")
- var themeFlag = flag.String("theme", "", "theme (dark | light)")
- var nobFlag = flag.Bool("nob", false, "not open browswer?")
- func main() {
- log.SetFlags(0)
- flag.Parse()
- port, isAppEngine := *portFlag, false
- if prt := os.Getenv("PORT"); prt != "" { // appengine std
- port = prt
- isAppEngine = true
- }
- addr, err := net.ResolveTCPAddr("tcp", fmt.Sprintf(":%v", port))
- if err != nil {
- log.Fatal(err)
- }
- Retry:
- l, err := net.ListenTCP("tcp", addr)
- if err != nil {
- if strings.Index(err.Error(), "bind: address already in use") >= 0 {
- addr.Port++
- if addr.Port < 65535 {
- goto Retry
- }
- }
- log.Fatal(err)
- }
- go101.theme = *themeFlag
- genMode, rootURL := *genFlag, fmt.Sprintf("http://localhost:%v/", addr.Port)
- if !genMode && !isAppEngine {
- if !*nobFlag {
- err = openBrowser(rootURL)
- if err != nil {
- log.Println(err)
- }
- }
- go updateGolang101()
- }
- runServer := func() {
- log.Println("Server started:")
- log.Printf(" http://localhost:%v (non-cached version)\n", addr.Port)
- log.Printf(" http://127.0.0.1:%v (cached version)\n", addr.Port)
- (&http.Server{
- Handler: go101,
- WriteTimeout: 10 * time.Second,
- ReadTimeout: 5 * time.Second,
- }).Serve(l)
- }
- if genMode {
- go runServer()
- genStaticFiles(rootURL)
- return
- }
- runServer()
- }
|