From: Roger Peppe Date: Mon, 22 Oct 2012 07:58:27 +0000 (+0100) Subject: cmd/go: add join template function. X-Git-Tag: go1.1rc2~2074 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=9714691a3f1862f09cd8d8536131c01c15ab32c3;p=gostls13.git cmd/go: add join template function. It's common to use the go list command in shell scripts, but currently it's awkward to print a string slice from the Package type in a way that's easily parseable by the shell. For example: go list -f '{{range .Deps}}{{.}} {{end}}' (and even that prints an unwanted new line at the end|). To make this easier, this CL adds a "join" function to the format template. go list -f '{{join .Deps "\n"}}' R=rsc, dsymonds, minux.ma, remyoudompheng, r CC=golang-dev https://golang.org/cl/6680044 --- diff --git a/src/cmd/go/list.go b/src/cmd/go/list.go index 91b812f10a..391c47e94a 100644 --- a/src/cmd/go/list.go +++ b/src/cmd/go/list.go @@ -9,6 +9,7 @@ import ( "encoding/json" "io" "os" + "strings" "text/template" ) @@ -24,10 +25,10 @@ The default output shows the package import path: code.google.com/p/goauth2/oauth code.google.com/p/sqlite -The -f flag specifies an alternate format for the list, -using the syntax of package template. The default output -is equivalent to -f '{{.ImportPath}}'. The struct -being passed to the template is: +The -f flag specifies an alternate format for the list, using the +syntax of package template. The default output is equivalent to -f +'{{.ImportPath}}'. One extra template function is available, "join", +which calls strings.Join. The struct being passed to the template is: type Package struct { Dir string // directory containing package sources @@ -113,7 +114,7 @@ func runList(cmd *Command, args []string) { out.Write(nl) } } else { - tmpl, err := template.New("main").Parse(*listFmt) + tmpl, err := template.New("main").Funcs(template.FuncMap{"join": strings.Join}).Parse(*listFmt) if err != nil { fatalf("%s", err) }