gcc 安裝非常重要,golang的好多項目大部分都是go c混編。
先安裝gcc,需要翻牆,為了方便使用我上傳到百度雲了。
鏈接: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 遇到被牆,翻牆也不行,/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() }
沒做測試,也不知道測試什么。
大概就是這樣,還有什么問題可以留言聯系我。沒畢業的學生,不對的地方,和我說一下,謝謝。