windows版本go使用sqlite3。
windows版本的go很简单,直接从go官方网站下载一个go的压缩包,解压即可。
0、加压缩的go,执行一个设置环境变量的脚本,或者使用系统高级设置将go/bin路径添加到PATA中。
注意要使用管理员身份打开一个cmd,然后执行下面的set_env.bat 这个bat和go目录在同一路径,执行完,后面打开的cmd窗口就能执行go命令了。
setx -m GOPATH %~dp0go\ setx -m Path "%Path%;%~dp0go\bin" pause
1 初始化mod
在项目中先初始化mod(已经初始化过则忽略),打开终端(快捷键Ctrl+Shift+~)执行go mod init xxx(xxx为文件夹名)。
我的文件夹是server,所以命令是go mod init server.
这个命令不执行,则下一步安装sqlite3就会报错。
2 获取sqlite3,如果不执行初始化mod,则会提示get命令报错,建议改成install,用install还是报错,哈哈
go get -u github.com/mattn/go-sqlite3
3、安装msys64,然后安装gcc。这一步不执行,则编译test.go脚本就会报错。
pacman -S --needed base-devel mingw-w64-x86_64-toolchain
配置gcc的环境变量到path中,gcc会安装到mingw64/bin下面。E:\msys64\mingw64\bin
4、编译测试sqlite3脚本,如下是test.go
// mySQLiteLink project main.go package main import ( "database/sql" "fmt" _ "github.com/mattn/go-sqlite3" ) func InitOpen() { db, err := sql.Open("sqlite3", "./user.db") checkErr(err) stmt, err := db.Prepare("drop TABLE if EXISTS student") checkErr(err) res, err := stmt.Exec() checkErr(err) fmt.Println("创建数据表") sql_table := ` CREATE TABLE IF NOT EXISTS "student"( "uid" INTEGER PRIMARY KEY AUTOINCREMENT, "name" VARCHAR(64) NULL, "age" VARCHAR(64) NULL, "class" VARCHAR(64) NULL )` db.Exec(sql_table) //插入数据 stmt, err = db.Prepare("INSERT INTO student(name, age, class) values(?,?,?)") checkErr(err) res, err = stmt.Exec("小明", "12", "六年级一班") checkErr(err) id, err := res.LastInsertId() checkErr(err) fmt.Println(id) } func checkErr(err error) { if err != nil { panic(err) } } func main() { InitOpen() db, err := sql.Open("sqlite3", "./user.db") checkErr(err) //插入数据 stmt, err := db.Prepare("INSERT INTO student(name, age, class) values(?,?,?)") checkErr(err) res, err := stmt.Exec("小明", "12", "六年级一班") res, err = stmt.Exec("小红", "11", "六年级一班") res, err = stmt.Exec("小蓝", "13", "六年级一班") //返回数据库生成的整数。当插入新行时,自动递增 id, err := res.LastInsertId() checkErr(err) fmt.Println(id) //删除数据 stmt, err = db.Prepare("delete from student where uid=?") checkErr(err) res, err = stmt.Exec(1) checkErr(err) //查询数据 //查询数据 rows, err := db.Query("select * from student") checkErr(err) fmt.Println("result:") for rows.Next() { var uid int var name string var age string var class string err = rows.Scan(&uid, &name, &age, &class) checkErr(err) fmt.Println(uid) fmt.Println(name) fmt.Println(age) fmt.Println(class) } db.Close() }
go build ./test.go
或者go run ./test.go
PS E:\wamp\go\gb_player\go_server\server> go run .\test.go 创建数据表 1 4 result: 2 小明 12 六年级一班 3 小红 11 六年级一班 4 小蓝 13 六年级一班
编译报错:
解决panic:Binary was compiled with ‘CGO_ENABLED=0‘, go-sglite3 requires cgo to work. This is a stub的问题
输入命令: go env -w CGO_ENABLED=1,然后在输入go env 查看是否修改成功
-------------------广告线---------------
项目、合作,欢迎勾搭,邮箱:promall@qq.com
本文为呱牛笔记原创文章,转载无需和我联系,但请注明来自呱牛笔记 ,it3q.com