Source File
log.go
Belonging Package
internal/testlog
// Copyright 2017 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.// Package testlog provides a back-channel communication path// between tests and package os, so that cmd/go can see which// environment variables and files a test consults.package testlogimport// Interface is the interface required of test loggers.// The os package will invoke the interface's methods to indicate that// it is inspecting the given environment variables or files.// Multiple goroutines may call these methods simultaneously.type Interface interface {Getenv(key string)Stat(file string)Open(file string)Chdir(dir string)}// logger is the current logger Interface.// We use an atomic.Value in case test startup// is racing with goroutines started during init.// That must not cause a race detector failure,// although it will still result in limited visibility// into exactly what those goroutines do.var logger atomic.Value// SetLogger sets the test logger implementation for the current process.// It must be called only once, at process startup.func ( Interface) {if logger.Load() != nil {panic("testlog: SetLogger must be called only once")}logger.Store(&)}// Logger returns the current test logger implementation.// It returns nil if there is no logger.func () Interface {:= logger.Load()if == nil {return nil}return *.(*Interface)}// Getenv calls Logger().Getenv, if a logger has been set.func ( string) {if := Logger(); != nil {.Getenv()}}// Open calls Logger().Open, if a logger has been set.func ( string) {if := Logger(); != nil {.Open()}}// Stat calls Logger().Stat, if a logger has been set.func ( string) {if := Logger(); != nil {.Stat()}}