diff --git a/src/net/http/httptest/server.go b/src/net/http/httptest/server.go index ebafc9999c..b4e2e9266e 100644 --- a/src/net/http/httptest/server.go +++ b/src/net/http/httptest/server.go @@ -53,10 +53,10 @@ type Server struct { } func newLocalListener() net.Listener { - if *serve != "" { - l, err := net.Listen("tcp", *serve) + if serveFlag != "" { + l, err := net.Listen("tcp", serveFlag) if err != nil { - panic(fmt.Sprintf("httptest: failed to listen on %v: %v", *serve, err)) + panic(fmt.Sprintf("httptest: failed to listen on %v: %v", serveFlag, err)) } return l } @@ -73,7 +73,25 @@ func newLocalListener() net.Listener { // this flag lets you run // go test -run=BrokenTest -httptest.serve=127.0.0.1:8000 // to start the broken server so you can interact with it manually. -var serve = flag.String("httptest.serve", "", "if non-empty, httptest.NewServer serves on this address and blocks") +// We only register this flag if it looks like the caller knows about it +// and is trying to use it as we don't want to pollute flags and this +// isn't really part of our API. Don't depend on this. +var serveFlag string + +func init() { + if strSliceContainsPrefix(os.Args, "-httptest.serve=") || strSliceContainsPrefix(os.Args, "--httptest.serve=") { + flag.StringVar(&serveFlag, "httptest.serve", "", "if non-empty, httptest.NewServer serves on this address and blocks.") + } +} + +func strSliceContainsPrefix(v []string, pre string) bool { + for _, s := range v { + if strings.HasPrefix(s, pre) { + return true + } + } + return false +} // NewServer starts and returns a new Server. // The caller should call Close when finished, to shut it down. @@ -107,7 +125,7 @@ func (s *Server) Start() { s.URL = "http://" + s.Listener.Addr().String() s.wrap() s.goServe() - if *serve != "" { + if serveFlag != "" { fmt.Fprintln(os.Stderr, "httptest: serving on", s.URL) select {} }