Commit 6a72dd77 authored by Daniel Martí's avatar Daniel Martí

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: default avatarBrad Fitzpatrick <bradfitz@golang.org>
parent 61170f85
...@@ -15,10 +15,10 @@ import ( ...@@ -15,10 +15,10 @@ import (
"go/doc" "go/doc"
"go/parser" "go/parser"
"go/token" "go/token"
"internal/lazytemplate"
"path/filepath" "path/filepath"
"sort" "sort"
"strings" "strings"
"text/template"
"unicode" "unicode"
"unicode/utf8" "unicode/utf8"
) )
...@@ -556,7 +556,7 @@ func checkTestFunc(fn *ast.FuncDecl, arg string) error { ...@@ -556,7 +556,7 @@ func checkTestFunc(fn *ast.FuncDecl, arg string) error {
return nil return nil
} }
var testmainTmpl = template.Must(template.New("main").Parse(` var testmainTmpl = lazytemplate.New("main", `
package main package main
import ( import (
...@@ -657,4 +657,4 @@ func main() { ...@@ -657,4 +657,4 @@ func main() {
{{end}} {{end}}
} }
`)) `)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment