安装gcc 使用 go-sqlite3 Golang 链接 sqlite3
gcc 安装非常重要,golang的好多项目大部分都是go c混编。
先安装gcc,需要FQ,为了方便使用我上传到百度云了。
链接:https://pan.baidu.com/s/17NbFOizhext_YINOz-NU7A
提取码:3jb8
安装步骤 百度云下载,解压到你喜欢的磁盘。
下面就是添加环境变量,
添加新变量 MinGW , 这个名字是我自己把解压的改了,解压后是 名字是 mingw64,
然后把变量名加到 Path , %MinGW%\bin


测试是否安装成功
gcc -V
成功了 就是这样

下面就是正式开始使用 go-sqlite3 ,我们不用下载和安装sqlite3, 这个库就是嵌入式的数据库。
非常建议大家使用 go mod 比go get 什么省事太多,go get 遇到被墙,FQ也不行,/x/ 包从goole 迁到 github 了 但是内部路径没有改,mod 有一个开源项目
https://www.goproxy.io/ 就是这个项目 可以看一下,省好多时间。
怎么 使用 mod ,官网少了双引号,会报错,不知道为什么没有改。
// powershell 下用这两个 GO111MODULE=on GOPROXY="https://goproxy.io"
开启代理后,直接在import 下写要引入的库,然后golad会提示红色,不用管。也可以按照编辑器说的做。
但是建议
import ( "database/sql" _ "github.com/mattn/go-sqlite3" "log" )

这样一会就安装好,也添加到 go.sum go.mod ,都2019 年了 使用 mod 喽。
安装好以后下面是参考代码。只是做测试,以后扩展也方便。项目目录
尽力 mvc 开发结构

下面是个个文件的代码
initSqlit.go
package model
import (
"database/sql"
_ "github.com/mattn/go-sqlite3"
"log"
)
type SQLiteDB struct {
Sqlite3 *sql.DB
}
var SQLITE *SQLiteDB
func InitDB() {
SQLITE = &SQLiteDB{
Sqlite3: ConnectDB(),
}
}
func ConnectDB() *sql.DB {
db, err := sql.Open("sqlite3", "foo.db")
if err != nil {
log.Fatal("链接错误")
}
return db
}
sqlite3.go
package repositories
import (
"database/sql"
"fmt"
"leetcode/sqlite3_m/model"
"log"
"time"
)
func checkErr(err error) {
if err != nil {
fmt.Println("Prepare Error ", err)
}
}
type RepositoriesSqlite struct {
sqlite *sql.DB
}
func NewRepositoriesSqlite() *RepositoriesSqlite {
return &RepositoriesSqlite{sqlite: model.SQLITE.Sqlite3}
}
// Ping sql
func (r *RepositoriesSqlite) Ping() {
if err := r.sqlite.Ping(); err != nil {
log.Fatal(err)
}
fmt.Println("PING OK")
}
// 创建表
func (r *RepositoriesSqlite) Create() {
sql := r.sqlite
sqlStmt := `
create table userinfo (username text , departname text , created text);
`
_, err := sql.Exec(sqlStmt)
checkErr(err)
//fmt.Println(f)
}
// 插入数据
func (r *RepositoriesSqlite) Insert() {
sql := r.sqlite
stmt, err := sql.Prepare("INSERT INTO userinfo(username, departname, created) values(?,?,?)")
checkErr(err)
res, err := stmt.Exec("我的名字", "IEC118", time.Now())
checkErr(err)
_, err = res.LastInsertId()
checkErr(err)
//fmt.Println("ID ... ",id)
}
// 查询数据
func (r *RepositoriesSqlite) Query() {
sql := r.sqlite
rows, err := sql.Query("SELECT * FROM userinfo")
checkErr(err)
for rows.Next() {
var username string
var department string
var created string
err = rows.Scan(&username, &department, &created)
checkErr(err)
fmt.Print(username, " ")
fmt.Print(department, " ")
fmt.Print(created, " \n")
}
}
// 删除数据
func(r *RepositoriesSqlite) Delete() {
sql := r.sqlite
stmt,err := sql.Prepare("DELETE FROM userinfo WHERE username = ?")
if err != nil {
log.Fatal(err)
}
result ,err :=stmt.Exec("astaxie")
affectNum, err := result.RowsAffected()
if err != nil {
log.Fatal(err)
}
fmt.Println("delete affect rows is ", affectNum)
}
// 数据更新
func (r *RepositoriesSqlite) Update(){
sql := r.sqlite
stmt , err := sql.Prepare("UPDATE userinfo SET created = ? WHERE username = ?")
if err != nil{
log.Fatal(err)
}
result , err :=stmt.Exec("2016-09-7","我的名字")
affectNum, err := result.RowsAffected()
if err != nil {
log.Fatal(err)
}
fmt.Println("update affect rows is ", affectNum)
}
main.go
package main
import (
_ "github.com/mattn/go-sqlite3"
"leetcode/sqlite3_m/model"
"leetcode/sqlite3_m/repositories"
)
func main() {
model.InitDB()
s := repositories.NewRepositoriesSqlite()
s.Ping()
//s.Create()
//s.Insert()
//s.Delete()
//s.Update()
//s.Query()
}
没做测试,也不知道测试什么。
大概就是这样,还有什么问题可以留言联系我。没毕业的学生,不对的地方,和我说一下,谢谢。

浙公网安备 33010602011771号