2017-12-22 33 views
3

文字列をテキストとして解析するときに、解析できない文字列がゼロ時間になるようにしてから実行します。 (ineffassign)golangのエラーをリセットするのは悪い習慣ですか?

誤るために無駄割り当て:

passwordLastUsed, err = time.Parse(time.RFC3339, record[lastUsed]) 
if err != nil { 
    err = nil 
    passwordLastUsed = time.Time{} 
} 

このコードは少し厄介に見えると 'ineffassign' リンターは 'ERR = nil' の声明のためにこれを返します。

警告

これを処理するより良い方法はありますか、または私はちょうどリンターを無視する必要がありますか?

+6

おそらくあなたがnilにそれを設定した後、後で 'err'変数を使用しないことを言っているので、あなただけのようにもそれをnilを作らないかもしれない、とだけに – xs0

+0

をpasswordLastUsedセットいくつかのコンテキストを追加すると、 'err'はこのスニペットが置かれている関数からの名前付きの戻り値です。関数のどこかでそれを使用し、呼び出された関数がnil以外の値を返さないとすぐにそれを返します。 – jonhadfield

+0

他の場所で使用することができますが、それを再度確認する前に無条件に設定しています。そうしないと警告が表示されません。 – Flimzy

答えて

3

エラー変数をリセットするのは悪いことではありません。

後で使用されない変数を設定するのは悪い習慣です。これが警告の意味です。あなたは常にnilになりますifブロックerr後以来、をやっているよう

は、おそらくエラーをリセットするには理由が決してません。

場合によってはリセットしているだけでも意味があります。一般的な例:

result, err := db.Query(...) 
if err == sql.ErrNoRows { 
    err = nil // Ignore not-found rows 
} 
if err != nil { 
    return err // But return all other errors 
} 
+0

それは感謝します、ありがとう。私は後でそれを使用しているので、リンターはこの特定のケースでは間違っていると思います。 – jonhadfield

+0

いいえ、リンターは正しいです。後でそれを使用しているかもしれませんが、無条件に再度リセットした後にのみ使用してください。 – Flimzy

+1

さて、わかりました。そのスニペットの直後に "if err!= nil if"という別のチェックを追加し、もはや効果がないと繰り返されなくなりました。あなたが言ったように、errはそのコードの後では常にnilに等しく、次のコードはerrの値をリセットするので、実際には効果がありませんでした。 – jonhadfield

関連する問題