package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" // _ "github.com/mattn/go-oci8" "os" "strings" ) func main() { types, usr, pwd, url, database, fileName, tables := "mysql", "root", "admin", "127.0.0.1:35017", "hy_qggwy", "hy_qggwy", "'a01','a02','a05','a06','a08','a14','a15','a17','a30','a33','a36','a57','a65','a99z1','b01'" types = strings.ToUpper(types) if strings.Contains(types, "MYSQL") { tables = writeMySQL(usr, pwd, url, database, tables) } else if strings.Contains(types, "ORACLE") || strings.Contains(types, "ORCL") { tables = writeOracle(usr, pwd, url, database, tables) } createFile(tables, fileName) } func writeOracle(usr, pwd, url, database, tables string) string { // 待完成 var sql1 = "SELECT concat(upper(COLUMN_NAME), case when DATA_TYPE='decimal' then ' int `json:\"' when DATA_TYPE='timestamp' then ' time.Time `json:\"' else ' string `json:\"' end, lower(COLUMN_NAME), '\"`') tName FROM information_schema.COLUMNS where upper(TABLE_NAME)=? order by ORDINAL_POSITION;" var sql0 = "SELECT upper(TABLE_NAME) tName FROM information_schema.COLUMNS where TABLE_NAME in (" + tables + ") group by TABLE_NAME order by TABLE_NAME;" allStr := "package main\nimport (\n\"time\"\n)\n" db, _ := sql.Open("oci8", fmt.Sprintf("%s/%s@%s/%s", usr, pwd, url, database)) row0, _ := db.Query(sql0) defer row0.Close() columns0, _ := row0.Columns() for row0.Next() { _ = row0.Scan(&columns0[0]) t := strings.ToUpper(columns0[0]) allStr += "type " + t + " struct {\n\t" // 查询脚本属性 row1, _ := db.Query(sql1, t) defer row1.Close() columns1, _ := row1.Columns() for row1.Next() { _ = row1.Scan(&columns1[0]) allStr += columns1[0] + "\n\t" } allStr += "\n}\n" } return allStr } func writeMySQL(usr, pwd, url, database, tables string) string { var sql1 = "SELECT concat(upper(COLUMN_NAME), case when DATA_TYPE='decimal' then ' int `json:\"' when DATA_TYPE='timestamp' then ' time.Time `json:\"' else ' string `json:\"' end, lower(COLUMN_NAME), '\"`') tName FROM information_schema.COLUMNS where upper(TABLE_NAME)=? order by ORDINAL_POSITION;" var sql0 = "SELECT upper(TABLE_NAME) tName FROM information_schema.COLUMNS where TABLE_NAME in (" + tables + ") group by TABLE_NAME order by TABLE_NAME;" allStr := "package main\nimport (\n\"time\"\n)\n" db, _ := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8", usr, pwd, url, database)) row0, _ := db.Query(sql0) defer row0.Close() columns0, _ := row0.Columns() for row0.Next() { _ = row0.Scan(&columns0[0]) t := strings.ToUpper(columns0[0]) allStr += "type " + t + " struct {\n\t" // 查询脚本属性 row1, _ := db.Query(sql1, t) defer row1.Close() columns1, _ := row1.Columns() for row1.Next() { _ = row1.Scan(&columns1[0]) allStr += columns1[0] + "\n\t" } allStr += "\n}\n" } return allStr } func createFile(allStr, fileName string) { file3, _ := os.Create(fileName + ".go") file3.WriteString(allStr) file3.Close() }