imported and not used の原因と直し方
importしたパッケージを一度も使わないとコンパイルエラーになります。関数を削除したときにimport文だけ消し忘れると典型的に発生します。
エラーメッセージの読み方
./main.go:5:2: "strconv" imported and not used
./main.go- ファイル名
5- 行番号
2- 列番号
"strconv" imported and not used- 詳細メッセージ — 何が問題だったか
このエラーが出る典型パターン
パターン1
1 package main 2 3 import ( 4 "fmt" 5 "strconv" ^ 6 ) 7 8 func main() { 9 fmt.Println("hi") 10 }
./main.go:5:2: "strconv" imported and not used
strconvをimportしたのにmain関数の中で一度も使っていません。使わないimportは削除するか空行にする必要があります。
直し方: "strconv" を (空) にします。
広告
広告スロット(未設定)
パターン2
1 package main 2 3 import ( 4 "fmt" 5 "os" ^ 6 ) 7 8 func main() { 9 fmt.Println("hi") 10 }
./main.go:5:2: "os" imported and not used
os.Exitなどを呼ぶ予定だったコードを消した後、import文だけ消し忘れるとこのエラーになります。
直し方: "os" を (空) にします。
パターン3
1 package main 2 3 import ( 4 "fmt" 5 "errors" ^ 6 ) 7 8 func main() { 9 fmt.Println("hi") 10 }
./main.go:5:2: "errors" imported and not used
errors.Newを使う予定だったが結局使わなかった場合も、未使用importとして扱われます。
直し方: "errors" を (空) にします。
パターン4
1 package main 2 3 import ( 4 "fmt" 5 "time" ^ 6 ) 7 8 func main() { 9 fmt.Println("hi") 10 }
./main.go:5:2: "time" imported and not used
time.Now()を呼ぶコードを書く前に消してしまうと、importだけが残りエラーになります。
直し方: "time" を (空) にします。
パターン5
1 package main 2 3 import ( 4 "fmt" 5 "sort" ^ 6 ) 7 8 func main() { 9 fmt.Println("hi") 10 }
./main.go:5:2: "sort" imported and not used
sort.Intsで並べ替える予定だったコードを削った後にimportが残ると、このエラーになります。
直し方: "sort" を (空) にします。
よくある誤解
「使わなくなったimportは残しておいても実害は無いはず」という思い込みは誤りです。Goのコンパイラは未使用importを未使用変数と同様に厳格にエラー扱いします。
まとめ
imported and not usedは初級でつまずきやすい項目です。上の5パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。