老妈 發表於 2019-7-5 08:35:00

安装gcc 使用 go-sqlite3 Golang 链接 sqlite3

<p>&nbsp;gcc 安装非常重要,golang的好多项目大部分都是go c混编。</p>
<p>&nbsp;</p>
<p>先安装gcc,需要FQ,为了方便使用我上传到百度云了。</p>
<p>&nbsp;</p>
<p>链接:https://pan.baidu.com/s/17NbFOizhext_YINOz-NU7A <br>提取码:3jb8 <br><br></p>
<p>&nbsp;</p>
<p>安装步骤&nbsp; 百度云下载,解压到你喜欢的磁盘。</p>
<p>&nbsp;</p>
<p>下面就是添加环境变量,</p>
<p>&nbsp;</p>
<p>添加新变量&nbsp; MinGW , 这个名字是我自己把解压的改了,解压后是 名字是 mingw64,</p>
<p>然后把变量名加到 Path , %MinGW%\bin</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img src="https://img2018.cnblogs.com/blog/1539352/201907/1539352-20190705080745275-2023903322.png"></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2018.cnblogs.com/blog/1539352/201907/1539352-20190705080817710-1336602117.png"></p>
<p>测试是否安装成功</p>
<div class="cnblogs_Highlighter">
<pre class="brush:go;gutter:true;">gcc -V
</pre>
</div>
<p>&nbsp;成功了 就是这样</p>
<p><img src="https://img2018.cnblogs.com/blog/1539352/201907/1539352-20190705081259729-991865918.png"></p>
<p>&nbsp;</p>
<p>&nbsp;下面就是正式开始使用 go-sqlite3 ,我们不用下载和安装sqlite3, 这个库就是嵌入式的数据库。</p>
<p>&nbsp;</p>
<p>非常建议大家使用 go mod&nbsp; 比go get 什么省事太多,go get 遇到被墙,FQ也不行,/x/ 包从goole 迁到 github 了 但是内部路径没有改,mod 有一个开源项目</p>
<p>https://www.goproxy.io/ 就是这个项目 可以看一下,省好多时间。</p>
<p>&nbsp;</p>
<p>怎么 使用 mod ,官网少了双引号,会报错,不知道为什么没有改。</p>
<div class="cnblogs_Highlighter">
<pre class="brush:go;gutter:true;">// powershell 下用这两个
GO111MODULE=on

GOPROXY="https://goproxy.io"
</pre>
</div>
<p>&nbsp;开启代理后,直接在import 下写要引入的库,然后golad会提示红色,不用管。也可以按照编辑器说的做。</p>
<p>但是建议</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="cnblogs_Highlighter">
<pre class="brush:go;gutter:true;">import (
        "database/sql"
        _ "github.com/mattn/go-sqlite3"
        "log"
)
</pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2018.cnblogs.com/blog/1539352/201907/1539352-20190705082517354-893995443.png"></p>
<p>&nbsp;</p>
<p>这样一会就安装好,也添加到 go.sum&nbsp; go.mod ,都2019 年了 使用 mod 喽。</p>
<p>&nbsp;</p>
<p>安装好以后下面是参考代码。只是做测试,以后扩展也方便。项目目录</p>
<p>尽力 mvc 开发结构</p>
<p><img src="https://img2018.cnblogs.com/blog/1539352/201907/1539352-20190705082858855-1410847680.png"></p>
<p>下面是个个文件的代码</p>
<p>initSqlit.go</p>
<div class="cnblogs_Highlighter">
<pre class="brush:go;gutter:true;">package model

import (
        "database/sql"
        _ "github.com/mattn/go-sqlite3"
        "log"
)

type SQLiteDB struct {
        Sqlite3 *sql.DB
}

var SQLITE *SQLiteDB

func InitDB() {
        SQLITE = &amp;SQLiteDB{
                Sqlite3: ConnectDB(),
        }
}
func ConnectDB() *sql.DB {
        db, err := sql.Open("sqlite3", "foo.db")
        if err != nil {
                log.Fatal("链接错误")
        }

        return db
}
</pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;sqlite3.go</p>
<div class="cnblogs_Highlighter">
<pre class="brush:go;gutter:true;">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 &amp;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(&amp;username, &amp;department, &amp;created)
                checkErr(err)

                fmt.Print(username, "")
                fmt.Print(department, "")
                fmt.Print(created, "\n")
        }
}

// 删除数据

func(r *RepositoriesSqlite) Delete() {
        sql := r.sqlite
        stmt,err := sql.Prepare("DELETEFROM 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)
}
</pre>
</div>
<p>&nbsp;main.go</p>
<div class="cnblogs_Highlighter">
<pre class="brush:go;gutter:true;">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()
}
</pre>
</div>
<p>&nbsp;没做测试,也不知道测试什么。</p>
<p>大概就是这样,还有什么问题可以留言联系我。没毕业的学生,不对的地方,和我说一下,谢谢。</p><br><br>
来源:https://www.cnblogs.com/Addoil/p/11136155.html
頁: [1]
查看完整版本: 安装gcc 使用 go-sqlite3 Golang 链接 sqlite3