Go语言实战案例-使用SQLite实现本地存储

在开发工具类软件、桌面应用或者移动端时,我们经常需要一个轻量级数据库来做 本地存储 。相比 MySQL、Postgres 等服务型数据库,SQLite 体积小、零配置、单文件存储,非常适合这种场景。

Go 语言通过 GORM + SQLite 驱动 就能轻松实现。本文将带你一步步用 Go 搭建一个 SQLite 本地存储的示例。


一、环境准备

安装依赖库:

arduino 复制代码
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite

二、定义模型

我们以一个 Note 记事本模型为例:

go 复制代码
package main

import (
    "gorm.io/driver/sqlite"
    "gorm.io/gorm"
    "log"
)

// Note 记事本模型
type Note struct {
    ID      uint   `gorm:"primaryKey"`
    Title   string `gorm:"size:100"`
    Content string
}

var db *gorm.DB

func initDB() {
    var err error
    // 创建/连接 SQLite 文件数据库
    db, err = gorm.Open(sqlite.Open("notes.db"), &gorm.Config{})
    if err != nil {
        log.Fatal("数据库连接失败:", err)
    }

    // 自动迁移
    _ = db.AutoMigrate(&Note{})
}

运行后,会在当前目录下生成一个 notes.db 文件,里面存储了表结构和数据。


三、实现基本的本地存储操作

1. 新增数据

go 复制代码
func createNote(title, content string) {
    note := Note{Title: title, Content: content}
    db.Create(&note)
    log.Println("新增笔记成功:", note)
}

2. 查询数据

scss 复制代码
func getNotes() {
    var notes []Note
    db.Find(&notes)
    log.Println("所有笔记:", notes)
}

3. 更新数据

go 复制代码
func updateNote(id uint, newContent string) {
    db.Model(&Note{}).Where("id = ?", id).Update("content", newContent)
    log.Println("更新笔记成功, ID:", id)
}

4. 删除数据

bash 复制代码
func deleteNote(id uint) {
    db.Delete(&Note{}, id)
    log.Println("删除笔记成功, ID:", id)
}

四、测试本地存储

scss 复制代码
func main() {
    initDB()

    // 新增两条笔记
    createNote("Go 学习计划", "每天刷 1 个实战案例")
    createNote("购物清单", "牛奶、面包、鸡蛋")

    // 查询
    getNotes()

    // 更新
    updateNote(1, "每天刷 2 个实战案例")
    getNotes()

    // 删除
    deleteNote(2)
    getNotes()
}

五、运行效果

首次运行,会生成 notes.db 文件。SQLite 可以用 命令行工具或第三方软件(如 DB Browser for SQLite) 打开查看。

程序日志:

css 复制代码
新增笔记成功: {1 Go 学习计划 每天刷 1 个实战案例}
新增笔记成功: {2 购物清单 牛奶、面包、鸡蛋}
所有笔记: [{1 Go 学习计划 每天刷 1 个实战案例} {2 购物清单 牛奶、面包、鸡蛋}]
更新笔记成功, ID: 1
所有笔记: [{1 Go 学习计划 每天刷 2 个实战案例} {2 购物清单 牛奶、面包、鸡蛋}]
删除笔记成功, ID: 2
所有笔记: [{1 Go 学习计划 每天刷 2 个实战案例}]

六、总结

通过本案例,我们实现了:

  • • 使用 GORM + SQLite 搭建 本地存储数据库
  • • 自动迁移模型(建表)
  • • 实现了 CRUD 操作(增删改查)
  • • 数据存储在单个 notes.db 文件中,方便移植与备份

SQLite 非常适合:

  • 桌面应用:比如记事本、数据分析工具
  • 移动应用:本地缓存、用户数据存储
  • 轻量级服务:不需要 MySQL/Postgres 的完整环境
相关推荐
舒一笑7 分钟前
如何优雅统计知识库文件个数与子集下不同文件夹文件个数
后端·mysql·程序员
IT果果日记8 分钟前
flink+dolphinscheduler+dinky打造自动化数仓平台
大数据·后端·flink
Java技术小馆19 分钟前
InheritableThreadLoca90%开发者踩过的坑
后端·面试·github
寒士obj28 分钟前
Spring容器Bean的创建流程
java·后端·spring
数字人直播1 小时前
视频号数字人直播带货,青否数字人提供全套解决方案!
前端·javascript·后端
shark_chili2 小时前
提升Java开发效率的秘密武器:Jadx反编译工具详解
后端
武子康2 小时前
大数据-75 Kafka 高水位线 HW 与日志末端 LEO 全面解析:副本同步与消费一致性核心
大数据·后端·kafka
YANGZHAO2 小时前
Docker零基础入门:一文搞定容器化核心技能
后端·docker
字节跳跃者2 小时前
SpringBoot + MinIO + kkFile 实现文件预览,这样操作更安全!
java·后端·程序员
我是哪吒2 小时前
分布式微服务系统架构第167集:从零到能跑kafka-redis实战
后端·面试·github