Documentation ¶
Overview ¶
Vet examines Go source code and reports suspicious constructs, such as Printf calls whose arguments do not align with the format string. Vet uses heuristics that do not guarantee all reports are genuine problems, but it can find errors not caught by the compilers.
Vet is normally invoked using the go command by running "go vet":
go vet
vets the package in the current directory.
go vet package/path/name
vets the package whose path is provided.
Use "go help packages" to see other ways of specifying which packages to vet.
Vet's exit code is 2 for erroneous invocation of the tool, 1 if a problem was reported, and 0 otherwise. Note that the tool does not check every possible problem and depends on unreliable heuristics so it should be used as guidance only, not as a firm indicator of program correctness.
By default the -all flag is set so all checks are performed. If any flags are explicitly set to true, only those tests are run. Conversely, if any flag is explicitly set to false, only those tests are disabled. Thus -printf=true runs the printf check, -printf=false runs all checks except the printf check.
By default vet uses the object files generated by 'go install some/pkg' to typecheck the code. If the -source flag is provided, vet uses only source code.
Available checks:
Assembly declarations ¶
Flag: -asmdecl
Mismatches between assembly files and Go function declarations.
Useless assignments ¶
Flag: -assign
Check for useless assignments.
Atomic mistakes ¶
Flag: -atomic
Common mistaken usages of the sync/atomic package.
Boolean conditions ¶
Flag: -bool
Mistakes involving boolean operators.
Build tags ¶
Flag: -buildtags
Badly formed or misplaced +build tags.
Invalid uses of cgo ¶
Flag: -cgocall
Detect some violations of the cgo pointer passing rules.
Unkeyed composite literals ¶
Flag: -composites
Composite struct literals that do not use the field-keyed syntax.
Copying locks ¶
Flag: -copylocks
Locks that are erroneously passed by value.
HTTP responses used incorrectly ¶
Flag: -httpresponse
Mistakes deferring a function call on an HTTP response before checking whether the error returned with the response was nil.
Failure to call the cancelation function returned by WithCancel ¶
Flag: -lostcancel
The cancelation function returned by context.WithCancel, WithTimeout, and WithDeadline must be called or the new context will remain live until its parent context is cancelled. (The background context is never cancelled.)
Methods ¶
Flag: -methods
Non-standard signatures for methods with familiar names, including:
Format GobEncode GobDecode MarshalJSON MarshalXML Peek ReadByte ReadFrom ReadRune Scan Seek UnmarshalJSON UnreadByte UnreadRune WriteByte WriteTo
Nil function comparison ¶
Flag: -nilfunc
Comparisons between functions and nil.
Printf family ¶
Flag: -printf
Suspicious calls to fmt.Print, fmt.Printf, and related functions. The check applies to known functions (for example, those in package fmt) as well as any detected wrappers of known functions.
The -printfuncs flag specifies a comma-separated list of names of additional known formatting functions. Each name can be of the form pkg.Name or pkg.Type.Name, where pkg is a complete import path, or else can be a case-insensitive unqualified identifier like "errorf". If a listed name ends in f, the function is assumed to be Printf-like, taking a format string before the argument list. Otherwise it is assumed to be Print-like, taking a list of arguments with no format string.
Range loop variables ¶
Flag: -rangeloops
Incorrect uses of range loop variables in closures.
Shadowed variables ¶
Flag: -shadow=false (experimental; must be set explicitly)
Variables that may have been unintentionally shadowed.
Shifts ¶
Flag: -shift
Shifts equal to or longer than the variable's length.
Struct tags ¶
Flag: -structtags
Struct tags that do not follow the format understood by reflect.StructTag.Get. Well-known encoding struct tags (json, xml) used with unexported fields.
Tests and documentation examples ¶
Flag: -tests
Mistakes involving tests including functions with incorrect names or signatures and example tests that document identifiers not in the package.
Unreachable code ¶
Flag: -unreachable
Unreachable code.
Misuse of unsafe Pointers ¶
Flag: -unsafeptr
Likely incorrect uses of unsafe.Pointer to convert integers to pointers. A conversion from uintptr to unsafe.Pointer is invalid if it implies that there is a uintptr-typed word in memory that holds a pointer value, because that word will be invisible to stack copying and to the garbage collector.
Unused result of certain function calls ¶
Flag: -unusedresult
Calls to well-known functions and methods that return a value that is discarded. By default, this includes functions like fmt.Errorf and fmt.Sprintf and methods like String and Error. The flags -unusedfuncs and -unusedstringmethods control the set.
Other flags ¶
These flags configure the behavior of vet:
-all (default true) Enable all non-experimental checks. -v Verbose mode -printfuncs A comma-separated list of print-like function names to supplement the standard list. For more information, see the discussion of the -printf flag. -shadowstrict Whether to be strict about shadowing; can be noisy.
Using vet directly ¶
For testing and debugging vet can be run directly by invoking "go tool vet" or just running the binary. Run this way, vet might not have up to date information for imported packages.
go tool vet source/directory/*.go
vets the files named, all of which must be in the same package.
go tool vet source/directory
recursively descends the directory, vetting each package it finds.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
internal
|
|
cfg
This package constructs a simple control-flow graph (CFG) of the statements and expressions within a single function.
|
This package constructs a simple control-flow graph (CFG) of the statements and expressions within a single function. |
whitelist
Package whitelist defines exceptions for the vet tool.
|
Package whitelist defines exceptions for the vet tool. |