You can scan your code for vulnerabilities directly out of your editor with the Go extension for Visual Studio Code.
Note: for an explanation of the vulnerability fix included in the images below, see the govulncheck tutorial.
Step 1. Run “Go: Toggle Vulncheck”
The Toggle Vulncheck command displays vulnerability analysis for all the dependencies listed in your modules. To use this command, open the command palette in your IDE (Ctrl+Shift+P on Linux/Windows or Cmd+Shift+P on Mac OS) and run “Go: Toggle Vulncheck.” In your go.mod file, you will see the diagnostics for vulnerable dependencies that are used both directly and indirectly in your code.
Note: To reproduce this tutorial on your own editor, copy the code below into your main.go file.
// This program takes language tags as command-line // arguments and parses them. package main import ( "fmt" "os" "golang.org/x/text/language" ) func main() { for _, arg := range os.Args[1:] { tag, err := language.Parse(arg) if err != nil { fmt.Printf("%s: error: %v\n", arg, err) } else if tag == language.Und { fmt.Printf("%s: undefined\n", arg) } else { fmt.Printf("%s: tag %s\n", arg, tag) } } }
Then, make sure the corresponding go.mod file for the program looks like this:
module module1 go 1.18 require golang.org/x/text v0.3.5
Now, run go mod tidy
to ensure that your go.sum file is updated.
Step 2. Run govulncheck via a code action.
Running govulncheck using a code action allows you to focus on the dependencies that are actually called in your code. Code actions in VS Code are marked by lightbulb icons; hover over the relevant dependency to see information about the vulnerability, then select “Quick Fix” to be shown a menu of options. Of these, choose “run govulncheck to verify.” This will return the relevant govulncheck output in your terminal.
Step 3. Hover over a dependency listed in your go.mod file.
The relevant govulncheck output about a specific dependency can also be found by hovering over the dependency in the go.mod file. For a quick look at dependency information, this option is even more efficient than using a code action.
Step 4. Upgrade to a “fixed in” version of your dependency.
Code actions can also be used to quickly upgrade to a version of your dependency where the vulnerability is fixed. Do this by selecting the “Upgrade” option in the code action drop-down menu.