Open11

go testのキャッシュ関連の内部実装を見る

はやせはやせ

[寄り道]
switchのdefaultが最初に書かれているの初めて見た
早期リターン的な書き方ってことなんだな

switch op {
default:
    if cache.DebugTest {
        fmt.Fprintf(os.Stderr, "testcache: %s: input list malformed (%q)\n", a.Package.ImportPath, line)
    }
    return cache.ActionID{}, errBadTestInputs
case "getenv":
    fmt.Fprintf(h, "env %s %x\n", name, hashGetenv(name))
はやせはやせ

Act関数はパッケージごとに呼ばれる

// runTest関数内(一部抜粋)
for _, p := range pkgs { // pkgs はテスト対象のパッケージのリスト
    // ...
    buildTest, runTest, printTest, perr, err := builderTest(b, ctx, pkgOpts, p, allImports[p], writeCoverMetaAct)
    // ...
    runs = append(runs, runTest) // runTest は runTestActor を Actor とするアクション
    // ...
}
// ...
b.Do(ctx, root) // runTestActor の Act メソッドがこの中で実行される

https://github.com/golang/go/blob/master/src/cmd/go/internal/test/test.go#L995-L1045