Not handling defer errors

Mistake

Ignoring errors when using the defer keyword

type Closer interface {
  Close() error
}

func getBalance(db *sql.DB, clientID string) (float32, error) {
  rows, err := db.Query(query, clientID)

  if err != nil {
    return 0, err
  }

  // if this errors, it will not be reported
  defer rows.Close()

  // ...
}

Fix

Use some defer technique to ensure that the error is handled or acknowledged in some way.

type Closer interface {
  Close() error
}

func getBalance(db *sql.DB, clientID string) (float32, error) {
  rows, err := db.Query(query, clientID)

  if err != nil {
    return 0, err
  }

  defer func(){
    err := rows.Close()
    if err != nil {
      log.Printf("failed to close: %v", err)
    }
  }

  // ...
}

References