diff --git a/core/builder.go b/core/builder.go index 59fe853..a8853de 100644 --- a/core/builder.go +++ b/core/builder.go @@ -55,7 +55,7 @@ func (b *Builder) Quote(str string, l, r byte) *Builder { return b.WBytes(l).WString(str).WBytes(r) } -// QuoteKey 给 str 左右添加 QuoteLeft 和 QuoteRight 两个字符 +// QuoteKey 给 str 左右添加 [QuoteLeft] 和 [QuoteRight] 两个字符 func (b *Builder) QuoteKey(str string) *Builder { return b.Quote(str, QuoteLeft, QuoteRight) } @@ -94,7 +94,7 @@ func (b *Builder) Bytes() ([]byte, error) { // Len 获取长度 func (b *Builder) Len() int { return b.buffer.Len() } -// Append 追加加一个 Builder 的内容 +// Append 追加加一个 [Builder] 的内容 func (b *Builder) Append(v *Builder) *Builder { if b.Err() != nil { return b diff --git a/core/model.go b/core/model.go index 033c827..38dd8ab 100644 --- a/core/model.go +++ b/core/model.go @@ -41,8 +41,8 @@ type ( // ApplyModeler 加载数据模型 // - // 当一个对象实现此接口时,那么在将对象转换成 Model 类型时, - // 会调用 ApplyModel 方法,给予用户修改 Model 的机会。 + // 当一个对象实现此接口时,那么在将对象转换成 [Model] 类型时, + // 会调用 ApplyModel 方法,给予用户修改 [Model] 的机会。 ApplyModeler interface { ApplyModel(*Model) error } @@ -101,14 +101,14 @@ type ( // 目前支持的数据模型类别 // -// Table 表示为一张普通的数据表,默认的模型即为 Table; -// 如果实现了 Viewer 接口,则该模型改变视图类型,即 View。 +// Table 表示为一张普通的数据表,默认的模型即为 [Table]; +// 如果实现了 [Viewer] 接口,则该模型改变视图类型,即 [View]。 // // 两者的创建方式稍微有点不同: // Table 类型创建时,会采用列、约束和索引等信息创建表; // 而 View 创建时,只使用了 Viewer 接口返回的 Select // 语句作为内容生成语句,像约束等信息,仅作为查询时的依据, -// 当然 select 语句中的列需要和 Columns 中的列要相对应, +// 当然 select 语句中的列需要和 [Columns] 中的列要相对应, // 否则可能出错。 // // 在视图类型中,唯一约束、主键约束、自增约束依然是可以定义的, @@ -119,9 +119,9 @@ const ( View ) -// NewModel 初始化 Model +// NewModel 初始化 [Model] // -// cap 表示列的数量,如果指定了,可以提前分配 Columns 字段的大小。 +// cap 表示列的数量,如果指定了,可以提前分配 [Model.Columns] 字段的大小。 func NewModel(modelType ModelType, name string, cap int) *Model { return &Model{ Name: name, diff --git a/core/primitive.go b/core/primitive.go index f75aa7d..0c2c3f3 100644 --- a/core/primitive.go +++ b/core/primitive.go @@ -13,9 +13,9 @@ import ( // TimeFormatLayout 时间如果需要转换成字符串采用此格式 const TimeFormatLayout = time.RFC3339 -// 当前支持的 PrimitiveType 值 +// 当前支持的 [PrimitiveType] 值 // -// 其中的 String 被设计成可以保存部分类型为 reflect.Interface 的数据结构, +// 其中的 [String] 被设计成可以保存部分类型为 [reflect.Interface] 的数据结构, // 但是一个有限的集合,比如将一个 any 字段赋予 slice 类型的数,在保存时可会不被支持。 // 且在读取时,各个数据库略有不同,比如 mysql 返回 []byte,而其它数据一般返回 string。 const ( @@ -124,12 +124,12 @@ type PrimitiveTyper interface { // PrimitiveType 表示 Go 对象在数据库中实际的存储方式 // -// PrimitiveType 由 Dialect.SQLType 转换成相应数据的实际类型。 +// PrimitiveType 由 [Dialect.SQLType] 转换成相应数据的实际类型。 type PrimitiveType int // GetPrimitiveType 获取 t 所关联的 PrimitiveType 值 // -// t.Kind 不能为 reflect.Ptr 否则将返回 Auto。 +// t.Kind 不能为 [reflect.Ptr] 否则将返回 [Auto]。 func GetPrimitiveType(t reflect.Type) PrimitiveType { primitiveType, found := kinds[t.Kind()] if found { diff --git a/core/stmt.go b/core/stmt.go index 3e0c6b8..a83fd28 100644 --- a/core/stmt.go +++ b/core/stmt.go @@ -13,7 +13,7 @@ import ( // Stmt 实现自定义的 Stmt 实例 // -// 功能与 sql.Stmt 完全相同,但是实现了对 sql.NamedArgs 的支持。 +// 功能与 sql.Stmt 完全相同,但是实现了对 [sql.NamedArgs] 的支持。 type Stmt struct { *sql.Stmt orders map[string]int @@ -21,8 +21,8 @@ type Stmt struct { // NewStmt 声明 Stmt 实例 // -// 如果 orders 为空,则 Stmt 的表现和 sql.Stmt 是完全相同的, -// 如果不为空,则可以处理 sql.NamedArg 类型的参数。 +// 如果 orders 为空,则 Stmt 的表现和 [sql.Stmt] 是完全相同的, +// 如果不为空,则可以处理 [sql.NamedArg] 类型的参数。 func NewStmt(stmt *sql.Stmt, orders map[string]int) *Stmt { if len(orders) > 0 { vals := make([]int, 0, len(orders)) diff --git a/db.go b/db.go index 2168dc7..706be43 100644 --- a/db.go +++ b/db.go @@ -175,7 +175,7 @@ func (db *DB) LastInsertID(v TableNamer) (int64, error) { return lastInsertID(db // Insert 插入数据 // -// NOTE: 若需一次性插入多条数据,请使用 tx.InsertMany()。 +// NOTE: 若需一次性插入多条数据,请使用 [Tx.InsertMany]。 func (db *DB) Insert(v TableNamer) (sql.Result, error) { return insert(db, v) } func (db *DB) Delete(v TableNamer) (sql.Result, error) { return del(db, v) } diff --git a/dialect/dialect.go b/dialect/dialect.go index 141088f..551365b 100644 --- a/dialect/dialect.go +++ b/dialect/dialect.go @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: MIT -// Package dialect 提供了部分数据库对 orm.Dialect 接口的实现 +// Package dialect 提供了部分数据库对 [core.Dialect] 接口的实现 package dialect import ( diff --git a/dialect/mysql.go b/dialect/mysql.go index af6c88e..db41cc4 100644 --- a/dialect/mysql.go +++ b/dialect/mysql.go @@ -31,7 +31,7 @@ var ( _ sqlbuilder.InsertDefaultValueHooker = &mysql{} ) -// Mysql 返回一个适配 mysql 的 Dialect 接口 +// Mysql 返回一个适配 mysql 的 [core.Dialect] 接口 // // 支持以下 options 属性 // diff --git a/dialect/postgres.go b/dialect/postgres.go index 3ce7d3f..360089d 100644 --- a/dialect/postgres.go +++ b/dialect/postgres.go @@ -20,7 +20,7 @@ type postgres struct { base } -// Postgres 返回一个适配 postgresql 的 Dialect 接口 +// Postgres 返回一个适配 postgresql 的 [core.Dialect] 接口 func Postgres(driverName string) core.Dialect { return &postgres{ base: newBase("postgres", driverName, '"', '"'), diff --git a/dialect/sqlite3.go b/dialect/sqlite3.go index c5f10fe..2f4bd7c 100644 --- a/dialect/sqlite3.go +++ b/dialect/sqlite3.go @@ -29,7 +29,7 @@ var ( _ sqlbuilder.AddConstraintStmtHooker = &sqlite3{} ) -// Sqlite3 返回一个适配 sqlite3 的 Dialect 接口 +// Sqlite3 返回一个适配 sqlite3 的 [core.Dialect] 接口 // // Options 可以接受以下参数: // - rowid 可以是 rowid(false);rowid(true),rowid,其中只有 rowid(false) 等同于 without rowid diff --git a/doc.go b/doc.go index 0c0d28a..7c012b1 100644 --- a/doc.go +++ b/doc.go @@ -5,11 +5,11 @@ // Package orm 一个简单小巧的 orm 实现方案 // // 目前内置了对以下数据库的支持: -// 1. sqlite3: github.com/mattn/go-sqlite3 -// 2. mysql: github.com/go-sql-driver/mysql -// 3. postgres: github.com/lib/pq +// - sqlite3: github.com/mattn/go-sqlite3 +// - mysql: github.com/go-sql-driver/mysql +// - postgres: github.com/lib/pq // -// 其它数据库,用户可以通过实现 Dialect 接口,来实现相应的支持。 +// 其它数据库,用户可以通过实现 [Dialect] 接口,来实现相应的支持。 // // 初始化: // @@ -54,7 +54,7 @@ // Group string `orm:"name(group)"` // } // -// // 通过 orm.ApplyModeler 接口,指定表的额外数据。若不需要,可不用实现该接口 +// // 通过 [ApplyModeler] 接口,指定表的额外数据。若不需要,可不用实现该接口 // func(u *User) ApplyModel(m *core.Model) error { // m.Name = "user" // m.Options["engine"] = "innodb" @@ -102,7 +102,7 @@ // ApplyModeler: // // 用于将一个对象转换成 Model 对象时执行的函数,给予用户修改 Model 的机会, -// 在 ApplyModeler 中可以修改任意模型的内容,所以也可以由 ApplyModeler 代替 struct tag 的操作。 +// 在 [ApplyModeler] 中可以修改任意模型的内容,所以也可以由 ApplyModeler 代替 struct tag 的操作。 // // 约束名: // @@ -158,7 +158,7 @@ // // 事务: // -// 默认的 DB 是不支持事务的,若需要事务支持,则需要调用 DB.Begin() -// 返回事务对象 Tx,当然并不是所有的数据库都支持事务操作的。 -// Tx 拥有一组与 DB 相同的接口。 +// 默认的 [DB] 是不支持事务的,若需要事务支持,则需要调用 [DB.Begin] +// 返回事务对象 [Tx],当然并不是所有的数据库都支持事务操作的。 +// [Tx] 拥有一组与 [DB] 相同的接口。 package orm diff --git a/fetch/column.go b/fetch/column.go index 8f80dc8..1cfc2c2 100644 --- a/fetch/column.go +++ b/fetch/column.go @@ -56,7 +56,7 @@ func Column(once bool, colName string, rows *sql.Rows) ([]any, error) { // ColumnString 导出 rows 中某列的所有或是一行数据 // -// 功能等同于 Column() 函数,但是返回值是 []string 而不是 []interface{}。 +// 功能等同于 [Column] 函数,但是返回值是 []string 而不是 []interface{}。 func ColumnString(once bool, colName string, rows *sql.Rows) ([]string, error) { cols, err := rows.Columns() if err != nil { diff --git a/go.mod b/go.mod index f13f898..a451a7c 100644 --- a/go.mod +++ b/go.mod @@ -1,11 +1,11 @@ module github.com/issue9/orm/v5 require ( - github.com/go-sql-driver/mysql v1.8.0 + github.com/go-sql-driver/mysql v1.8.1 github.com/issue9/assert/v4 v4.1.1 github.com/issue9/conv v1.3.5 github.com/issue9/errwrap v0.3.2 - github.com/issue9/sliceutil v0.15.1 + github.com/issue9/sliceutil v0.16.0 github.com/lib/pq v1.10.9 github.com/mattn/go-sqlite3 v1.14.22 github.com/shopspring/decimal v1.3.1 diff --git a/go.sum b/go.sum index be4b015..90697b8 100644 --- a/go.sum +++ b/go.sum @@ -4,6 +4,8 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/go-sql-driver/mysql v1.8.0 h1:UtktXaU2Nb64z/pLiGIxY4431SJ4/dR5cjMmlVHgnT4= github.com/go-sql-driver/mysql v1.8.0/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= +github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= +github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= @@ -16,8 +18,8 @@ github.com/issue9/conv v1.3.5 h1:UWeA+Zqp5vjNDLrmhLhaXPjS1hL8gh4quX6Shk5njKQ= github.com/issue9/conv v1.3.5/go.mod h1:lkZYMyrmxy+HK//N4eLmwUl9mCwj0zgeTjnxgl/w7hM= github.com/issue9/errwrap v0.3.2 h1:7KEme9Pfe75M+sIMcPCn/DV90wjnOcRbO4DXVAHj3Fw= github.com/issue9/errwrap v0.3.2/go.mod h1:KcCLuUGiffjooLCUjL89r1cyO8/HT/VRcQrneO53N3A= -github.com/issue9/sliceutil v0.15.1 h1:mV1VlQSO5E8sh2ab6pypLg7TdgGZlDb30E8quli01xY= -github.com/issue9/sliceutil v0.15.1/go.mod h1:ldun6sT4/bOJxuMtOXhtc6P7GCwE7L+avV86HNks7qk= +github.com/issue9/sliceutil v0.16.0 h1:+gyumWF126mprQLiUi14s6SAeucMg1vuyPEh66VTtC8= +github.com/issue9/sliceutil v0.16.0/go.mod h1:ldun6sT4/bOJxuMtOXhtc6P7GCwE7L+avV86HNks7qk= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= diff --git a/types.go b/types.go index 2939224..b81f5f2 100644 --- a/types.go +++ b/types.go @@ -17,7 +17,7 @@ import ( type ( // Unix 表示 Unix 时间戳的数据样式 // - // 表现为 time.Time,但是保存数据库时,以 unix 时间戳的形式保存。 + // 表现为 [time.Time],但是保存数据库时,以 unix 时间戳的形式保存。 Unix = types.Unix Rat = types.Rat @@ -40,7 +40,7 @@ type ( BeforeInsert() error } - // ModelEngine 针对操作 TableNamer 接口数据的接口 + // ModelEngine 针对操作 [TableNamer] 的操作接口 ModelEngine interface { // LastInsertID 插入一条数据并返回其自增 ID // @@ -112,6 +112,4 @@ type ( func NowUnix() Unix { return Unix{Time: time.Now()} } // NowNullTime 返回当前时间 -func NowNullTime() sql.NullTime { - return sql.NullTime{Time: time.Now(), Valid: true} -} +func NowNullTime() sql.NullTime { return sql.NullTime{Time: time.Now(), Valid: true} } diff --git a/types/decimal.go b/types/decimal.go index 24f6fa4..73ed11e 100644 --- a/types/decimal.go +++ b/types/decimal.go @@ -21,14 +21,14 @@ type Decimal struct { Valid bool } -// FloatDecimal 从浮点数还原 Decimal 对象 +// FloatDecimal 从浮点数还原 [Decimal] 对象 // // precision 表示输出的精度。 func FloatDecimal(f float64, precision int32) Decimal { return Decimal{Decimal: decimal.NewFromFloat(f), Precision: precision, Valid: true} } -// StringDecimal 从字符串还原 Decimal 对象 +// StringDecimal 从字符串还原 [Decimal] 对象 // // precision 表示输出的精度。 func StringDecimal(s string, precision int32) (Decimal, error) { @@ -39,7 +39,7 @@ func StringDecimal(s string, precision int32) (Decimal, error) { return Decimal{Decimal: d, Precision: precision, Valid: true}, nil } -// StringDecimalWithPrecision 从字符串还原 Decimal 对象 +// StringDecimalWithPrecision 从字符串还原 [Decimal] 对象 // // 输出精度从 s 获取,如果 s 不包含小数位,则小数长度为 0 func StringDecimalWithPrecision(s string) (Decimal, error) { diff --git a/types/rat.go b/types/rat.go index e4279f1..320e66d 100644 --- a/types/rat.go +++ b/types/rat.go @@ -14,7 +14,7 @@ import ( // Rat 有理数 // -// 这是对 math/big.Rat 的扩展,提供了 orm 需要的接口支持。 +// 这是对 [big.Rat] 的扩展,提供了 orm 需要的接口支持。 // // 在数据库中以分数的形式保存至字符串类型的列,所以需要指定长度。 type Rat struct { @@ -64,7 +64,7 @@ func (n Rat) Value() (driver.Value, error) { return n.Rat().String(), nil } -// Rat 返回标准库中 math/big.Rat 的实例 +// Rat 返回标准库中 [big.Rat] 的实例 func (n Rat) Rat() *big.Rat { return n.rat } func (n Rat) PrimitiveType() core.PrimitiveType { return core.String } diff --git a/types/unix.go b/types/unix.go index 9198dbc..879468d 100644 --- a/types/unix.go +++ b/types/unix.go @@ -14,7 +14,7 @@ import ( "github.com/issue9/orm/v5/core" ) -// Unix 以 unix 时间戳保存的 time.Time 数据格式 +// Unix 以 unix 时间戳保存的 [time.Time] 数据格式 type Unix struct { time.Time Valid bool