mirror of
https://github.com/golang/go
synced 2024-11-05 14:36:11 -07:00
ef3dcd5937
The GOPATH environment variable is defined at https://golang.org/cmd/go/#hdr-GOPATH_environment_variable as: > The GOPATH environment variable lists places to look for Go code. On > Unix, the value is a colon-separated string. On Windows, the value is > a semicolon-separated string. On Plan 9, the value is a list. It is legal for Go packages to be in any of those places, not only the first entry. Look in all places for golang.org/x/tools repository. Cache the directory that is found. It's slightly more expensive to look for it, since potentially multiple directories must be checked for existence. Updates golang/go#19400. Change-Id: I16661b7149d52ea6168fffc605c842d7a4da009b Reviewed-on: https://go-review.googlesource.com/38778 Reviewed-by: Michael Matloob <matloob@golang.org>
84 lines
2.3 KiB
Go
84 lines
2.3 KiB
Go
// Copyright 2016 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// heapview is a tool for viewing Go heap dumps.
|
|
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"go/build"
|
|
"io"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
var host = flag.String("host", "", "host addr to listen on")
|
|
var port = flag.Int("port", 8080, "service port")
|
|
|
|
var index = `<!DOCTYPE html>
|
|
<script src="js/customelements.js"></script>
|
|
<script src="js/typescript.js"></script>
|
|
<script src="js/moduleloader.js"></script>
|
|
<script>
|
|
System.transpiler = 'typescript';
|
|
System.typescriptOptions = {target: ts.ScriptTarget.ES2015};
|
|
System.locate = (load) => load.name + '.ts';
|
|
</script>
|
|
<script type="module">
|
|
import {main} from './client/main';
|
|
main();
|
|
</script>
|
|
`
|
|
|
|
func toolsDir() string {
|
|
p, err := build.Import("golang.org/x/tools", "", build.FindOnly)
|
|
if err != nil {
|
|
log.Println("error: can't find client files:", err)
|
|
os.Exit(1)
|
|
}
|
|
return p.Dir
|
|
}
|
|
|
|
var parseFlags = func() {
|
|
flag.Parse()
|
|
}
|
|
|
|
var addHandlers = func() {
|
|
toolsDir := toolsDir()
|
|
|
|
// Directly serve typescript code in client directory for development.
|
|
http.Handle("/client/", http.StripPrefix("/client",
|
|
http.FileServer(http.Dir(filepath.Join(toolsDir, "cmd/heapview/client")))))
|
|
|
|
// Serve typescript.js and moduleloader.js for development.
|
|
http.HandleFunc("/js/typescript.js", func(w http.ResponseWriter, r *http.Request) {
|
|
http.ServeFile(w, r, filepath.Join(toolsDir, "third_party/typescript/typescript.js"))
|
|
})
|
|
http.HandleFunc("/js/moduleloader.js", func(w http.ResponseWriter, r *http.Request) {
|
|
http.ServeFile(w, r, filepath.Join(toolsDir, "third_party/moduleloader/moduleloader.js"))
|
|
})
|
|
http.HandleFunc("/js/customelements.js", func(w http.ResponseWriter, r *http.Request) {
|
|
http.ServeFile(w, r, filepath.Join(toolsDir, "third_party/webcomponents/customelements.js"))
|
|
})
|
|
|
|
// Serve index.html using html string above.
|
|
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
|
w.Header().Set("Content-Type", "text/html")
|
|
io.WriteString(w, index)
|
|
})
|
|
}
|
|
|
|
var listenAndServe = func() error {
|
|
return http.ListenAndServe(fmt.Sprintf("%s:%d", *host, *port), nil)
|
|
}
|
|
|
|
func main() {
|
|
parseFlags()
|
|
addHandlers()
|
|
log.Fatal(listenAndServe())
|
|
}
|