Help us shape the future of Go! Take the 2026 Go Developer Survey

scanner

package
v0.8.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 28, 2026 License: MIT Imports: 5 Imported by: 0

Documentation

Overview

Package scanner 的 MySQL 实现。

Package scanner — PostgreSQL 扫表器实现。 移植自 Java PostgreSqlTableScanner,用 information_schema 三段查询读取列/主键/表注释。

为什么用三段查询而不是一段?

PostgreSQL 把"列信息"、"约束信息"、"对象注释"存在不同的系统表/视图里:

  • information_schema.columns:列的基础属性(类型、可空、默认值等)
  • information_schema.table_constraints + key_column_usage:约束(PRIMARY KEY/UNIQUE 等)
  • pg_class + obj_description:表/对象级别注释

三段查询能各自独立失败/重试,逻辑更清晰。

Go 小白知识点:$1 占位符

PostgreSQL 驱动(如 lib/pq)要求用 $1, $2... 作为查询参数占位符。 与 MySQL 的 ? 不同,PostgreSQL 的占位符是有序编号的, 同一参数可多次引用(例如 $1 出现两次即传入同一个值两次)。

Package scanner 连接数据库读取表结构元数据。

设计思路

Java 版通过 JDBC 的 DatabaseMetaData 或直接执行 SQL 读表结构。 Go 版用标准库 database/sql 执行相同 SQL,逻辑完全对称。

接口 vs 实现

Go 接口是隐式实现(implicit interface): 只要某类型拥有接口声明的全部方法,就自动满足该接口,无需 implements 关键字。 这使得 TableScanner 可以在测试中被任意 mock 结构体替换。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type TableScanner

type TableScanner interface {
	// ScanTable 读取指定表的列信息和表注释,返回结构化元数据。
	ScanTable(table string) (model.TableMetadata, error)
}

TableScanner 扫表接口(隐式实现)。 调用方只依赖接口,不依赖具体的 mySQLScanner,便于后续扩展 PostgreSQL 实现。

func For

func For(d dialect.SqlDialect, db *sql.DB) (TableScanner, error)

For 按 SQL 方言返回对应的扫表器。

当前支持:MySQL(M1)、PostgreSQL(M3)。

Go 小白知识点:switch 语句无需 break,默认不会 fall-through(和 Java/C 不同)。 对于未知方言,走 default 分支,用 fmt.Errorf 构造带上下文信息的 error 返回。

func NewMySQL

func NewMySQL(db *sql.DB) TableScanner

NewMySQL 用一个已打开的 *sql.DB 构造 MySQL 扫表器。

返回类型是接口 TableScanner,而非具体类型 mySQLScanner, 这样调用方无法直接访问内部字段,保持良好的封装性。

func NewPostgreSQL

func NewPostgreSQL(db *sql.DB) TableScanner

NewPostgreSQL 用已打开的 *sql.DB 构造 PostgreSQL 扫表器。 返回 TableScanner 接口而非具体类型,调用方不需要知道底层实现。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL