2017-12-22 31 views
3

문자열을 텍스트로 구문 분석 할 때 구문 분석 할 수없는 문자열로 인해 시간이 0이되고 계속 수행되기를 원합니다. (ineffassign)golang에서 오류를 재설정하는 것은 나쁜 습관입니까?

실수를 범하는 헛된 할당 :

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

이 코드는 지저분한 외모와 'ineffassign'린터은 'ERR = 전무'문이 반환

경고

이것을 처리하는 더 좋은 방법이 있습니까? 아니면 방금 린터를 무시해야합니까?

+6

아마도 당신이 전무로 설정 한 후, 나중에'err' 변수를 사용하지 않는 것이 말하는, 그래서 당신은 단지뿐만 아니라 그것을 nil을 확인하지 않을 수 있습니다, 만에 – xs0

+0

을 passwordLastUsed 세트 어떤 컨텍스트를 추가하면, 'err'은이 스 니펫이 들어있는 함수의 명명 된 반환 값입니다. 함수의 다른 곳에서이 함수를 사용하고 호출하는 함수가 0이 아닌 값을 반환하지 않으면 즉시 반환합니다. – 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"이라는 또 다른 체크를 추가했으며 더 이상 효과가없는 것으로 반복되지 않았습니다. 당신이 말했듯이, err은 그 코드 조각 다음에 항상 같지 않았고, 다음 코드는 오류의 값을 재설정했기 때문에 실제로는 효과가 없었습니다. – jonhadfield