go test 无法构建:调用可能有格式指令

Jos*_*nig 6 go

go test当对库中要按设计进行测试的函数的调用包含格式化指令时,拒绝构建。这是故意的还是错误?不管怎样,有解决方法吗?

请注意,与Call has possibleformatingdirective不同,这不是不接受格式指令的内置函数的调用。它是对我编写的函数的调用,该函数是专门为接受格式化指令而设计的。

这是一个人为但完整的复制品。NotemakeError旨在处理格式字符串。go build工作正常,但go test会产生以下错误并且不运行任何测试:

.\example.go:16:13: makeError call has possible formatting directive %v
FAIL    sandbox/example [build failed]
Run Code Online (Sandbox Code Playgroud)

去版本:go version go1.12.7 windows/amd64

example.go:

.\example.go:16:13: makeError call has possible formatting directive %v
FAIL    sandbox/example [build failed]
Run Code Online (Sandbox Code Playgroud)

example_test.go:

package example

import "fmt"

type ErrExample struct {
    data interface{}
    msg  string
}

func (e *ErrExample) Error() string {
    return e.msg
}

func Divide(f1 float64, f2 float64) (float64, error) {
    if f2 == 0.0 {
        return 0, makeError(nil, "Cannot divide %v by 0", f1)
    }
    return f1 / f2, nil
}

func makeError(data interface{}, msgAndArgs ...interface{}) error {
    msg := ""
    switch len(msgAndArgs) {
    case 0:
        // Ignore
    case 1:
        msg = fmt.Sprint(msgAndArgs[0])
    default:
        if str, ok := msgAndArgs[0].(string); ok {
            msg = fmt.Sprintf(str, msgAndArgs[1:]...)
        }
        msg = fmt.Sprint(msgAndArgs...)
    }
    return &ErrExample{data: data, msg: msg}
}
Run Code Online (Sandbox Code Playgroud)

Bur*_*dar 7

来自 go test 的帮助文本:

作为构建测试二进制文件的一部分,go test 对包及其测试源文件运行 go vet 以识别重大问题。如果 go vet 发现任何问题,go test 会报告这些问题并且不会运行测试二进制文件。仅使用默认兽医检查的高可信度子集。该子集是:“atomic”、“bool”、“buildtags”、“nilfunc”和“printf”。您可以通过“go doc cmd/vet”查看这些和其他兽医测试的文档。要禁用 go vet 的运行,请使用 -vet=off 标志。”