sqlrows
1.0.0
sqlrows 는 정적 코드 분석기로 sql.Rows 사용의 실수에 대한 진단을보고하여 버그를 발견하는 데 도움이됩니다.
go get 명령으로 sqlrows 얻을 수 있습니다.
$ go get -u github.com/gostaticanalysis/sqlrows sqlrows GO가 1.12 이상인 경우 아래와 같이 go vet 과 함께 실행됩니다.
$ go vet -vettool= $( which sqlrows ) github.com/you/sample_api/... 이동이 1.12보다 낮을 때는 패키지 이름 (가져 오기 경로)으로 sqlrows 명령을 실행하십시오.
그러나 --tags 와 같은 일부 옵션을 받아 들일 수는 없습니다.
$ sqlrows github.com/you/sample_api/... sqlrows *sql.Rows 사용할 때 일반적인 실수를 확인합니다.
처음에는 연기 기능으로 rows.Close() 호출해야합니다. 예기치 않게 레코드를 스캔하지 못하고 *sql.Rows 닫는 것을 잊어 버린 경우 연결이 재사용되지 않습니다.
rows , err := db . QueryContext ( ctx , "SELECT * FROM users" )
if err != nil {
return nil , err
}
for rows . Next () {
err = rows. Scan ( ... )
if err != nil {
return nil , err // NG: this return will not release a connection.
}
} 또한 반환이 유효한지 여부를 결정하는 오류를 확인하기 전에 *sql.Rows 닫기 위해 함수 호출을 연기하면 rows.Close() 이중으로 호출한다는 의미입니다.
rows , err := db . QueryContext ( ctx , "SELECT * FROM users" )
defer rows . Close () // NG: using rows before checking for errors
if err != nil {
return nil , err
}그것은 공황 및 nil-pointer 참조를 유발할 수 있지만 그것들 때문이라고 명확하게 가르치지는 않습니다.