Go: Unused imports

As you may have noticed, programs with unused imports do not compile:

package main

import (
	"fmt"
	"log" // "imported and not used: log"
)

func main() {
	fmt.Println("Hello")
}
../main.go:5:2: imported and not used: "log"

This is a deliberate feature of the Go language:

The presence of an unused variable may indicate a bug […] Go refuses to compile programs with unused variables or imports, trading short-term convenience for long-term build speed and program clarity. Go FAQ: Can I stop these complaints about my unused variable/import?

Workaround

There’s no compiler option to allow unused imports. If you don’t want to remove/comment out the import, you can for instance use it in a dummy assignment:

package main

import (
	"fmt"
	"log"
)

var _ = log.Printf

func main() {
	fmt.Println("Hello")
}

A better solution

Use the goimports tool, which rewrites a Go source file to have the correct imports. Many Go editors and IDEs run this tool automatically whenever a source file is written.

Comments