Goals of the sql and sql/driver packages:

* Provide a generic database API for a variety of SQL or SQL-like
  databases.  There currently exist Go libraries for SQLite, MySQL,
  and Postgres, but all with a very different feel, and often
  a non-Go-like feel.

* Feel like Go.

* Care mostly about the common cases. Common SQL should be portable.
  SQL edge cases or db-specific extensions can be detected and
  conditionally used by the application.  It is a non-goal to care
  about every particular db's extension or quirk.

* Separate out the basic implementation of a database driver
  (implementing the sql/driver interfaces) vs the implementation
  of all the user-level types and convenience methods.
  In a nutshell:

  User Code ---> sql package (concrete types) ---> sql/driver (interfaces)
  Database Driver -> sql (to register) + sql/driver (implement interfaces)

* Make type casting/conversions consistent between all drivers. To
  achieve this, most of the conversions are done in the sql package,
  not in each driver. The drivers then only have to deal with a
  smaller set of types.

* Be flexible with type conversions, but be paranoid about silent
  truncation or other loss of precision.

* Handle concurrency well.  Users shouldn't need to care about the
  database's per-connection thread safety issues (or lack thereof),
  and shouldn't have to maintain their own free pools of connections.
  The 'sql' package should deal with that bookkeeping as needed.  Given
  an *sql.DB, it should be possible to share that instance between
  multiple goroutines, without any extra synchronization.

* Push complexity, where necessary, down into the sql+driver packages,
  rather than exposing it to users. Said otherwise, the sql package
  should expose an ideal database that's not finnicky about how it's
  accessed, even if that's not true.

* Provide optional interfaces in sql/driver for drivers to implement
  for special cases or fastpaths.  But the only party that knows about
  those is the sql package.  To user code, some stuff just might start
  working or start working slightly faster.
