1 回答

TA貢獻1998條經(jīng)驗 獲得超6個贊
您可以知道go vet
要檢查哪些功能(比較godoc.org/cmd/vet):
$ cat x.go
package main
import "github.com/pkg/errors"
func ReturnError(s string, i int) error {
// Swap %d and %s, and forget to include the second argument
return errors.Errorf("invalid arguments %d and %s", s)
}
$ go vet x.go
$ go vet -printfuncs Errorf x.go
# command-line-arguments
./x.go:7: Errorf format %d has arg s of wrong type string
由于多種原因,要更好地做到這一點并不簡單:
格式字符串是運行時值:您可能會調(diào)用
fmt.Sprintf(prefix + "%s", ...)
. 所以不可能在編譯時捕獲所有無效的格式字符串。格式字符串沒有特殊類型。因此,編譯器無法通過查看函數(shù)定義輕松確定某個函數(shù)(
errors.Errorf
在本例中)期望其參數(shù)的行為與fmt.Printf
函數(shù)定義相同。
- 1 回答
- 0 關(guān)注
- 130 瀏覽
添加回答
舉報