我开源了Go语言连接数据库和一键生成结构体的包【实用】

项目地址https://gitee.com/zht639/my_gopkg

autosql

autosql 是一个简化数据库使用的模块,支持常见的数据库(MySQL、PostgreSQL、SQLite、SQL Server)。该模块不仅提供了数据库连接函数,还能自动生成数据表对应的结构体,极大简化了数据库的初始化操作。

一、使用方法

打开项目根目录,在该目录下打开命令行,然后按如下步骤操作。

(1)初始化mod(有则跳过此步)

bash 复制代码
go mod init 你的模块名

(2)下载包的最新版本(第一次下载可省略@master)

bash 复制代码
go get gitee.com/zht639/my_gopkg@master

(3)导包

go 复制代码
import "gitee.com/zht639/my_gopkg/autosql"

二、功能概述

  • 连接函数:

    • ConnMysql(username, password, host, port, dbname string): 连接 MySQL 数据库。
    • ConnPostgres(username, password, host, port, dbname string): 连接 PostgreSQL 数据库。
    • ConnSQLite(filepath string): 连接 SQLite 数据库。
    • ConnSQLServer(username, password, host, port, dbname string): 连接 SQL Server 数据库。
  • 结构体生成:

    • GenStruct(db *gorm.DB, tableName string): 生成数据库中指定表的结构体。
    • GenAllStructs(db *gorm.DB): 生成数据库中所有表的结构体。

    使用生成结构体功能可以将数据库中的表映射为 Go 语言的结构体,极大地提高了开发效率和代码的可维护性。

三、使用示例

以mysql为例,连接数据库并生成表的结构体:

go 复制代码
package main

import (
	"fmt"

	"gitee.com/zht639/my_gopkg/autosql"
)

func main() {
	db, err := autosql.ConnMysql("root", "123456", "localhost", "3306", "db01")
	if err != nil {
		fmt.Println(err)
		return
	}
	// 生成数据库中所有表的结构体
	autosql.GenAllStructs(db)
	//或者生成指定表对应的结构体
	//autosql.GenStruct(db, "student")
}

该函数将会在当前目录下生成一个model包,包含数据库中所有表的结构体,

目录结构如下:

bash 复制代码
├─model
│    grade.gen.go
│    student.gen.go
│    user.gen.go

打开其中一个文件,它不仅包含了结构体定义,还包含了json绑定字符串和返回表名的方法:

go 复制代码
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.

package model

import (
	"time"
)

const TableNameStudent = "student"

// Student mapped from table <student>
type Student struct {
	Stuid int32     `gorm:"column:stuid;primaryKey;autoIncrement:true" json:"stuid"`
	Stuno string    `gorm:"column:stuno" json:"stuno"`
	Name  string    `gorm:"column:name" json:"name"`
	Sex   string    `gorm:"column:sex" json:"sex"`
	Age   int32     `gorm:"column:age" json:"age"`
	Birth time.Time `gorm:"column:birth" json:"birth"`
}

// TableName Student's table name
func (*Student) TableName() string {
	return TableNameStudent
}

之后若数据库中的表结构发生变化,只需用GenStruct()GenAllStructs()重新生成结构体即可。

注意

1.必须在mod同级目录调用GenStruct()或GenAllStructs()。

2.该包基于GORM相关的包,但本人的包已包含相关依赖,直接下载本人的包即可使用GORM。

相关推荐
廿一夏7 小时前
MySql存储引擎与索引
数据库·sql·mysql
lzhdim9 小时前
SQL 入门 15:SQL 事务:从 ACID 到四种常见的并发问题
数据库·sql
瀚高PG实验室9 小时前
瀚高企业版V9.1.1在pg_restore还原备份文件时提示extract函数语法问题
数据库·瀚高数据库
TDengine (老段)9 小时前
TDengine Tag 设计哲学与 Schema 变更机制
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
YOU OU10 小时前
Spring IoC&DI
java·数据库·spring
Muscleheng11 小时前
Navicat连接postgresql时出现‘datlastsysoid does not exist‘报错
数据库·postgresql
罗超驿12 小时前
18.事务的隔离性和隔离级别:MySQL面试高频考点全解析
数据库·mysql·面试
jran-12 小时前
Redis 命令
数据库·redis·缓存
小江的记录本13 小时前
【Java基础】Java 8-21新特性:JDK21 LTS:虚拟线程、模式匹配switch、结构化并发、序列集合(附《思维导图》+《面试高频考点清单》)
java·数据库·python·mysql·spring·面试·maven
June`13 小时前
多线程redis下如何解决aof重写和rdb持久化的数据一致性问题
数据库·redis·缓存