I'd like to make a small contribution the golang and need to run the benchmarks, e.g. for encoding/json.
All my attempts are failed (go1.13):
❯ go test -bench encoding/json
build .: cannot find module for path .
❯ go test encoding/json
ok encoding/json 1.412s
❯ go test -bench std/encoding/json
build .: cannot find module for path .
❯ go test std/encoding/json
# std/encoding/json
package std/encoding/json (test)
imports internal/testenv: use of internal package internal/testenv not allowed
FAIL std/encoding/json [setup failed]
FAIL
❯ go test std
ok archive/tar (cached)
❯ go test -bench std
build .: cannot find module for path .
So how would I exclusively test encoding/json?
If this is a fresh checkout of the go source tree, after bootstrapping (i.e. running all.bash), go under go/src/ and run
../bin/go test ./encoding/json -bench=.
Or you can run it against the installed version the same way by going under /usr/local/go/src.
If you're planning to submit a performance enhancement, they'll want you to have before/after benchmarks comparisons. So run the benchmarks 10-20 times before and after, and compare the results using the benchstat
tool.
../bin/go test ./encoding/json -bench=. -count=10 >after
I believe this is due to Go modules, but what worked for me was to execute from within the stdlib:
cd /usr/local/go/src/encoding/json
go test -run='^$' -bench .