马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
工具类项目逐步喜好利用sqlite3数据库。工具类项目不存在并发标题,摆设项目也不须要额外去安装数据库服务端,非常省事。
1、安装sqlite3驱动
- go get github.com/mattn/go-sqlite3
复制代码 2、go毗连sqlite3初始化方法
- var db *sql.DB
- func init() {
-
-
- // 打开或创建一个 SQLite 数据库文件
- var err error
- db, err = sql.Open("sqlite3", "./db.db")
- if err != nil {
-
-
- log.Fatal(err)
- }
- // 测试连接
- if err = db.Ping(); err != nil {
-
-
- log.Fatal(err)
- }
- }
复制代码 这里涉及到一个init()函数。在 Go 语言中,init() 函数是一个特别的函数,它在步调开始实验时主动调用,这里就可以拿来毗连数据库初始化操纵。每个包都可以包罗恣意数量标 init() 函数,而且这些函数会在包被导入时主动实验。init() 函数通常用于初始化操纵,比方设置变量、打开文件或数据库毗连等。
init() 函数的特点:
- 主动调用:init() 函数不须要显式调用,它们在包被导入时主动实验。
- 实验次序:
- 如果一个包中有多个 init() 函数,它们会按照在源代码中的次序依次实验。
- 如果一个包导入了其他包,那么被导入包的 init() 函数会在导入它的包的 init() 函数之前实验。
- 无参数和返回值:init() 函数没有参数也没有返回值。
- 不能被其他函数调用:init() 函数只能由运行时体系调用,不能被其他函数调用。
3、测试Users布局体
- type Users struct {
-
-
- ID int
- Name string
- Email string
- }
复制代码 布局体字段的首字母是否大写决定了该字段是否对包外可见(便是否具有公共访问权限)
知识点:
- 首字母大写:如果一个标识符(包罗布局体字段、函数名、变量名等)的首字母是大写的,那么它就是可以被其他包访问的,即它是“导出的”或“公开的”。
- 首字母小写:如果一个标识符的首字母是小写的,那么它只能在其界说的包内部访问,对于其他包是不可见的,即它是“未导出的”或“私有的”。
4、users表CURD操纵
- // CreateUser 创建新用户
- func (u *Users) CreateUser() (int64, error) {
-
-
- stmt, err := db.Prepare("INSERT INTO users (name, email) VALUES (?, ?)")
- if err != nil {
-
-
- return 0, err
- }
- res, err := stmt.Exec(u.Name, u.Email)
- if err != nil {
-
-
- return 0, err
- }
- return res.LastInsertId()
- }
- // GetUserByID 根据 ID 获取用户
- func (u *Users) GetUserByID(id int) error {
-
-
- row := db.QueryRow("SELECT id, name, email FROM users WHERE id = ?", id)
- return row.Scan(&u.ID, &u.Name, &u.Email)
- }
- // GetAllUsers 获取所有用户
- func GetAllUsers() ([]*Users, error)
复制代码 |