cmd/go: delay parsing the testmain template

The template is over a hundred lines and full of pipelines, and
text/template isn't optimised to parse quickly, so it's no wonder that
delaying the parsing to the first template use makes 'go env' much
faster.

Like in the previous patches to get rid of global regexp.MustCompile
vars, use the newly introduced lazytemplate package. Close to two full
milliseconds are shaved off of 'go env' runs.

name         old time/op    new time/op    delta
ExecGoEnv-8    4.27ms ± 0%    2.63ms ± 1%  -38.43%  (p=0.002 n=6+6)

Updates #29382.

Change-Id: I4e2569e51ddf2afe1b46eb1a9e9e5845f7a3b0bd
Reviewed-on: https://go-review.googlesource.com/c/155962
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
Daniel Martí 2018-12-30 19:03:02 +01:00
parent 61170f85e6
commit 6a72dd77f4
1 changed files with 3 additions and 3 deletions

View File

@ -15,10 +15,10 @@ import (
"go/doc"
"go/parser"
"go/token"
"internal/lazytemplate"
"path/filepath"
"sort"
"strings"
"text/template"
"unicode"
"unicode/utf8"
)
@ -556,7 +556,7 @@ func checkTestFunc(fn *ast.FuncDecl, arg string) error {
return nil
}
var testmainTmpl = template.Must(template.New("main").Parse(`
var testmainTmpl = lazytemplate.New("main", `
package main
import (
@ -657,4 +657,4 @@ func main() {
{{end}}
}
`))
`)