Go语言使用SQLite实现本地存储的示例详解

 更新时间:2025年08月22日 09:50:53   作者:程序员爱钓鱼  
在开发工具类软件、桌面应用或者移动端时,我们经常需要一个轻量级数据库来做本地存储,本文将带你一步步用 Go 搭建一个 SQLite 本地存储的示例,希望对大家有所帮助

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

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

一、环境准备

安装依赖库:

go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite

二、定义模型

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

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. 新增数据

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

2. 查询数据

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

3. 更新数据

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

4. 删除数据

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

四、测试本地存储

func main() {
    initDB()

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

    // 查询
    getNotes()

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

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

五、运行效果

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

程序日志:

新增笔记成功: {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 的完整环境

到此这篇关于Go语言使用SQLite实现本地存储的示例详解的文章就介绍到这了,更多相关Go SQLite本地存储内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang如何用gorm实现分页的功能

    Golang如何用gorm实现分页的功能

    这篇文章主要介绍了Golang如何用gorm实现分页的功能方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • golang RWMutex读写锁实现读共享写独占的功能示例

    golang RWMutex读写锁实现读共享写独占的功能示例

    在 Go 里除了互斥锁外,还有读写锁 RWMutex,它主要用来实现读共享,写独占的功能,今天我们也顺便分析下读写锁,加深对 Go 锁的理解
    2023-09-09
  • Golang接口的定义与空接口及断言的使用示例

    Golang接口的定义与空接口及断言的使用示例

    在 Golang 中,接口是一种类型,它是由一组方法签名组成的抽象集合。这篇文章主要为大家介绍了Golang接口的具体使用,希望对大家有所帮助,空接口是特殊形式的接口类型,普通的接口都有方法,而空接口没有定义任何方法口,也因此,我们可以说所有类型都至少实现了空接口
    2023-04-04
  • 详解以go思想去处理js异常抛弃trycatch

    详解以go思想去处理js异常抛弃trycatch

    这篇文章主要为大家介绍了详解以go思想去处理js异常抛弃trycatch,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • win10下go mod配置方式

    win10下go mod配置方式

    这篇文章主要介绍了win10下go mod配置方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 解决Golang time.Parse和time.Format的时区问题

    解决Golang time.Parse和time.Format的时区问题

    这篇文章主要介绍了解决Golang time.Parse和time.Format的时区问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Go语言中OCR常用识别库的使用与实战指南

    Go语言中OCR常用识别库的使用与实战指南

    Go 生态里没有像 Python 那样大量直接内置 OCR 模型的库,但可以通过调用成熟 OCR 引擎(Tesseract)、用 OpenCV 做预处理、或接入云 OCR 服务来构建稳定的 OCR 流水线,本文把常见方案、优缺点、实战代码与工程级建议都列出来,需要的可以了解下
    2025-11-11
  • golang中strconv.ParseInt函数用法示例

    golang中strconv.ParseInt函数用法示例

    这篇文章主要介绍了golang中strconv.ParseInt函数用法,实例分析了strconv.ParseInt函数将字符串转换为数字的简单使用方法,需要的朋友可以参考下
    2016-07-07
  • Go字典使用详解

    Go字典使用详解

    今天和大家一起学习Go语言的字典。Go语言的字典又称为map,一种使用广泛的数据结构。它是拥有key/value对元素的「无序集合」,而且在集合中key必须是唯一的
    2022-11-11
  • Go uuid库的具体使用

    Go uuid库的具体使用

    在现代软件开发中,全球唯一标识符(UUID)在许多场景中发挥着重要的作用,本文主要介绍了Go uuid库的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11

最新评论