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?mainimport?("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.DBfunc?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?[]Notedb.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 的完整環境

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/919757.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919757.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919757.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

云計算學習100天-第23天

主機192.168.88.5 安裝nginx#安裝編譯工具,正則表達式依賴包,SSL加密依賴包 yum -y install gcc make pcre-devel openssl-devel tar -xf /root/lnmp_soft.tar.gz cd lnmp_soft/ tar -xf nginx-1.22.1.tar.gz cd nginx-1.22.1/ #指定安裝路徑&…

【生成樹+環】題解:P3907 環的異或_圖論_環_異或_搜索_算法競賽_C++

推銷洛谷博客:https://www.luogu.com.cn/article/znmr9iu9 Link:Luogu - P3907 這里默認題目中指的環都是“簡單環”(即沒有“環套環”的情況)。 眾所周知,樹是圖的一種特殊情況,且一定無環。如果我們想…

數據庫優化提速(二)排序優化之搜索大數據酒店,進銷存AI—仙盟創夢IDE

在 MySQL 數據庫管理中,排序操作對于數據的有效展示和分析至關重要。本文將以一個實際的 SQL 查詢為例,深入探討排序優化方案,并結合進銷存、酒店、知識庫等大數據場景,闡述這些優化策略的應用價值。原始SELECT 應用編號, 應用序列…

Linux之Ansible自動化運維(二)

一、ansible Playbook應用由于服務器數量很多,配置信息比較多,因此可以利用Ansible Playbook編寫任務自動化與流程化腳本Playbook 由一個或多個play組成的列表,play的主要功能Ansible中Task定義好的角色,指定劇本對應的服務器組二…

ArrayList線程不安全問題及解決方案詳解

問題背景在多線程編程中&#xff0c;我們經常會遇到集合類的線程安全問題。Java中的ArrayList是一個常用的集合類&#xff0c;但它不是線程安全的。當多個線程同時操作同一個ArrayList實例時&#xff0c;可能會出現各種不可預料的問題。問題演示List<String> list new A…

車輛方向數據集 - 物體檢測

關于數據集 包含超過50,000 張圖像中具有方向的車輛的 50,000 多萬個注釋。它通過同時提供車輛類別和方向來減少對方向進行分類的輔助神經網絡的需求。 預訓練權重 我們將繼續添加在車輛方向數據集和合成車輛方向數據集上訓練的各種對象檢測模型。如果您需要一些特定的預訓練權…

Nextcloud搭建教程:使用Docker在騰訊云服務器上自建私人云盤

更多云服務器知識&#xff0c;盡在hostol.com你那百兆光纖的寬帶。你是否也曾看著自己最珍貴的家庭照片、最私密的個人文檔&#xff0c;靜靜地躺在某個科技巨頭的服務器上&#xff0c;感到過一絲絲的不安&#xff1f;你的數據&#xff0c;到底被如何“閱讀”和“分析”&#xf…

【操作記錄】MNN Chat Android App 構建筆記(二)

&#x1f4d2; MNN Chat Android App 構建筆記 一、背景知識MNN 簡介 MNN 是阿里開源的輕量級深度學習框架&#xff0c;支持 Android / iOS / Linux / Windows。提供推理、LLM、Vision、Audio 等模塊。Android App 里用到的是 Java JNI 調用 MNN 庫。CMake NDK 的作用 CMake&…

如何在 Axios 中處理多個 baseURL 而不造成混亂

網羅開發&#xff08;小紅書、快手、視頻號同名&#xff09;大家好&#xff0c;我是 展菲&#xff0c;目前在上市企業從事人工智能項目研發管理工作&#xff0c;平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術&#xff0c;包括iOS、前端、Harmony OS、Java、Python等方…

AP服務發現PRS_SOMEIPSD_00255 的解析

[PRS_SOMEIPSD_00255 ] 「SOME/IP-SD頭部的重啟標志&#xff0c;對于重啟后發出的所有報文&#xff0c;都應設置為 1&#xff0c;直至 SOME/IP頭部中的會話 ID (Session-ID) 回繞并因此再次從 1 開始。在此回繞之后&#xff0c;重啟標志應設置為 0。」(RS_SOMEIPSD_00006)核心含…

純手擼一個RAG

純手擼一個RAGRAG基本流程第一階段&#xff1a;數據預處理&#xff08;索引&#xff09; - 構建知識庫第二階段&#xff1a;查詢與生成&#xff08;推理&#xff09; - 回答問題總結Chunk介紹Chunk框架的介紹Chunk核心概念選擇分塊策略和框架如何選擇分塊框架Python代碼實現第一…

視覺語言對比學習的發展史:從CLIP、BLIP、BLIP2、InstructBLIP(含MiniGPT4的詳解)

前言 本文一開始是屬于此文《圖像生成(AI繪畫)的發展史&#xff1a;從CLIP、BLIP、InstructBLIP到DALLE、DALLE 2、DALLE 3、Stable Diffusion(含ControlNet詳解)》的&#xff0c;后獨立成本文 第一部分 從CLIP、BLIP1、BLIP2到InstructBLIP 1.1 CLIP&#xff1a;基于對比文本…

HTTP代理與SOCKS代理的區別、應用場景與選擇指南

在互聯網日常使用與跨境業務中&#xff0c;HTTP代理 和 SOCKS代理 是兩種常見的網絡代理方式。無論是跨境電商、社交媒體賬號運營、數據采集&#xff0c;還是科學訪問海外資源&#xff0c;都需要選擇合適的代理協議。什么是HTTP代理&#xff1f;定義HTTP代理 是基于 HTTP協議 的…

AI重塑職業教育:個性化學習計劃提效率、VR實操模擬強技能,對接就業新路徑

職業教育長期面臨著一系列問題&#xff0c;包括“統一課程難以適配不同基礎學員”、“實操反饋滯后”和“就業技能與企業需求脫節”等。隨著人工智能技術的應用&#xff0c;這些傳統教學模式正在發生變化。個性化技能培養得以實現&#xff0c;甚至可以提前識別學員的就業短板。…

主題配色下的背景透明度

用 CSS color-mix() 解決背景透明度的痛點 在設計卡片組件時&#xff0c;經常遇到這樣的需求&#xff1a;卡片背景需要80%透明度&#xff0c;鼠標懸浮在內部某項時&#xff0c;修改背景色但保持同樣的透明度。 問題場景 .card {background: rgba(59, 130, 246, 0.8); /* 藍色80…

【Python代碼】谷歌專利CSV處理函數

以下是一個重構后的高可用、可配置、低耦合的專利CSV處理函數&#xff0c;包含清晰的注釋和結構&#xff1a; import csv import pandas as pd from datetime import datetime import os from typing import List, Dict, Any, Optional, Tuple import logging# 配置日志 loggin…

3-2〔OSCP ? 研記〕? WEB應用攻擊?WEB安全防護體系

鄭重聲明&#xff1a; 本文所有安全知識與技術&#xff0c;僅用于探討、研究及學習&#xff0c;嚴禁用于違反國家法律法規的非法活動。對于因不當使用相關內容造成的任何損失或法律責任&#xff0c;本人不承擔任何責任。 如需轉載&#xff0c;請注明出處且不得用于商業盈利。 …

PCIe 5.0相比頂級PCIe 4.0有何提升?

還在為PCIe 4.0固態硬盤那7000MB/s的速度沾沾自喜&#xff1f;醒醒&#xff0c;朋友。當很多人還在討論PCIe 4.0是否“性能過剩”時&#xff0c;真正面向未來的PCIe 5.0已經帶著碾壓級的實力&#xff0c;來到了我們面前。這不是一次常規的“升級”&#xff0c;更不是英特爾式的…

23種設計模式——適配器模式(Adapter)?詳解

?作者簡介&#xff1a;大家好&#xff0c;我是 Meteors., 向往著更加簡潔高效的代碼寫法與編程方式&#xff0c;持續分享Java技術內容。 &#x1f34e;個人主頁&#xff1a;Meteors.的博客 &#x1f49e;當前專欄&#xff1a; 設計模式 ?特色專欄&#xff1a; 知識分享 &…

Vue3源碼reactivity響應式篇之Reactive

概覽 vue3中reactive用于將普通對象轉換為響應式對象&#xff0c;它的實現原理是通過Proxy和Reflect來實現的。具體的實現文件參見packages\reactivity\src\reactive.ts。本文會介紹reactive的相關api如下&#xff1a; reactive&#xff1a;將普通對象轉換為響應式對象readonly…