Code Fix

初級

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パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)