🌚

io/ioutilパッケージの使用を見つけるlinterを作った

2021/09/10に公開

Go1.16のアップデートでio/ioutilパッケージがdeprecatedになり、io/ioutilパッケージの機能がosioパッケージにも移行されました。

https://golang.org/doc/go1.16#ioutil

io/ioutilパッケージはこれまで通りに動作するのですが、新しいコードにはioosパッケージの新しい定義を使用することが推奨されています。

そこでio/ioutilパッケージの使用を見つけてくれるlinterを作成しました。

https://github.com/le0tk0k/noioutil

使い方

インストール

go install github.com/le0tk0k/noioutil/cmd/noioutil@latest

io/ioutilパッケージを使用していると、

package main

import (
	"fmt"
	"io/ioutil"
)

func main() {
	bytes, _ := ioutil.ReadFile("foo.go")
	fmt.Println(string(bytes))
}

以下のように検知されます。

$ go vet -vettool=$(which noioutil) main.go
# command-line-arguments
./main.go:5:2: "io/ioutil" package is used

既存のコードからio/ioutilパッケージの使用をなくしたい時や、io/ioutilパッケージの使用を未然に防ぎたい時はぜひこのlinterを使ってみてください。

終わりに

ささっと作ったので何かあればissueかPRお願いします。

io/ioutilがdeprecatedになったことについての記事
https://future-architect.github.io/articles/20210210/

Discussion