Golang官方没有提供数据库驱动,只是为开发数据库驱动定义了一些标准接口,开发者可以根据官方定义的标准接口来开发相应的数据库驱动。这样做的好处是:只要是按照标准接口开发的代码,需要迁移数据库时不需要任何的修改。 Golang通过package database/sql定义了这一系列的针对SQL(或SQL-like)数据库的通用接口。sql package必须与一个database driver结合使用。SQL database drivers列表可以参考SQL Drivers。
sql和sql/driver的设计目标
sql package主要由两部分组成,database/sql和database/sql/driver。sql和sql/driver的设计目标是:
- 为SQL或SQL-Like的数据库提供的通用数据库API。当前已经有的Go libraries包括SQLite,MYSQL和Postgres等,但是所有的都具有非常不同的感觉,而且感觉不太像Go的风格。
- 感觉像Go
- 更多的考虑常见的情况。通常情况下SQL应当可移植。SQL的边界情况或者特定数据库的扩展可以被应用检查到,并有条件的使用。不应该将非常特殊的一些数据库扩展或奇怪的使用方法放入作为目的。
将database driver的基本实现(sql/driver interfaces的实现)与所有用户层类型和方法的实现分离。
简而言之,就是:
User Code —> sql package (具体类型) —> sql/driver (接口) —> Database Driver —> sql(注册的数据库) + sql/driver(implement interface)- 让类型转换(casting/conversions)在所有驱动间一致。为了达到这个目的,大部分的转换在sql package中完成,而不是在各个driver中,drivers只处理一小部分的数据类型。
- 灵活的类型转换,但是需要承受silent的截断和其他精度损失。
- 很好的处理并发。用