2021-12-10 Go Deprecation of io/ioutil / Golint → staticcheck
Goコード、久しぶりにメンテして golint→staticcheck 移行したり、Go 1.16 から Deprecated になった io/ioutil パッケージを書き換えたりした
— toshimaru (@toshimaru_e) December 8, 2021
Deprecation of io/ioutil - go.dev
まずは Go v1.16 から io/ioutil package が deprecated になった。
具体的には下記のように変更になった。
Discard
=>io.Discard
NopCloser
=>io.NopCloser
ReadAll
=>io.ReadAll
ReadDir
=>os.ReadDir
(note: returns a slice of os.DirEntry rather than a slice of fs.FileInfo)ReadFile
=>os.ReadFile
TempDir
=>os.MkdirTemp
TempFile
=>os.CreateTemp
WriteFile
=>os.WriteFile
Go1.16で追加されたio#ReadAll関数から読むストリーミング中のバッファ拡張の仕方 - My External Storage
中でも io.ReadAll
の関数がテクニカルでよい。
func ReadAll(r Reader) ([]byte, error) {
b := make([]byte, 0, 512)
for {
if len(b) == cap(b) {
// Add more capacity (let append pick how much).
b = append(b, 0)[:len(b)]
}
n, err := r.Read(b[len(b):cap(b)])
b = b[:len(b)+n]
if err != nil {
if err == EOF {
err = nil
}
return b, err
}
}
}
see also. Go1.16からのio/ioutilパッケージ | フューチャー技術ブログ
Golint → staticcheck
Go公式のlinter、Golintが非推奨になった
staticcheckはProposalのIssueでも度々名前が上がっていたlinterです。GoogleやGoがスポンサーになっており、Golintのリポジトリにも代替として名前が上がっています。
ということで Golint をやめて staticcheck に移行することにした。
ReviewdogのGitHub ActionsでGoのlintをかけてPRに表示する - sambaiz-net
staticcheck はreviewdog/action-staticcheckを使うのが便利だった。
name: reviewdog
on: [pull_request]
jobs:
staticcheck:
name: runner / staticcheck
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: reviewdog/action-staticcheck@v1
with:
filter_mode: diff_context
fail_on_error: true