症状
构建因 imported and not used: "fmt" 而中止,尽管该包在项目别处明显被引用。该错误是按文件报告的,因此问题出在某个具体文件,而非整个包。
诊断
在每个被报告的文件中搜索该包的限定符:
go build ./... 2>&1 | grep "imported and not used"
若文件导入了 fmt 却从未调用 fmt.,该导入即已失效。构建标签也可能让唯一使用该包的文件在当前构建中被排除。
修复
删除失效导入,或对仅为副作用的包使用空导入:
import (
_ "github.com/lib/pq" // registers the driver via init()
"fmt"
)
同时运行 goimports,让未使用的导入被自动清理。
验证
go build ./... 与 go vet ./... 均通过,说明每个导入在其文件中都有真实使用,整个模块可干净编译。