]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: delay parsing the testmain template
authorDaniel Martí <mvdan@mvdan.cc>
Sun, 30 Dec 2018 18:03:02 +0000 (19:03 +0100)
committerDaniel Martí <mvdan@mvdan.cc>
Thu, 28 Feb 2019 09:34:47 +0000 (09:34 +0000)
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>
src/cmd/go/internal/load/test.go

index bd6f00bb669fb3ca9bd89267f2ac8a2943788c3e..0a9548e5c8dffe19ccdeab2f9dfc721095742d74 100644 (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}}
 }
 
-`))
+`)