golang 简介
Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。
go语言优点
go是非常年轻的一门语言,“兼具Python 等动态语言的开发速度和C/C++等编译型语言的性能与安全性”,具备强大的标准库,内置垃圾回收机制,属于静态类型语言,因此具备编译检查和编码规范,特别是并发功能实现简单,但功能强大,可使用goroutine和channel轻松实现高并发。
使用Sqlite3,让应用更加便捷
在所有的数据库中,绿色便捷的数据库,我倾向于sqlite3。
无论是做小型网站的开发,还是做可执行程序数据库携带,sqlite3无疑是便捷、高效的。
golang标准库支持sql,但并没有sqlite3驱动,因此我们需要安装sqlite3驱动,才能方便连接sqlite3。
先看下整体源码,然后分步学习。
步骤1、安装sqlite3驱动
go get github.com/mattn/go-sqlite3
步骤2、安装tdm64-gcc
安装步骤,一路下一步就完成了。
步骤3、连接数据库
func init() {
log.SetFlags(log.LstdFlags | log.Llongfile)
Db, err = sql.Open("sqlite3", "db.db")
if err != nil {
log.Println(err)
}
}
步骤4、增加
// C 增加
func C(username, password string) (int64, int64) {
_sql := `INSERT INTO "users"("username", "password") VALUES (?, ?)`
stmt, err := Db.Prepare(_sql)
if err != nil {
log.Panicln(err.Error())
}
result, err := stmt.Exec(username, password)
if err != nil {
log.Panicln(err.Error())
}
affected, _ := result.RowsAffected()
insertId, _ := result.LastInsertId()
return affected, insertId
}
步骤5、删除
// D 删除
func D(id int) (int64, int64) {
_sql := `DELETE FROM "users" WHERE rowid = ?`
stmt, err := Db.Prepare(_sql)
if err != nil {
log.Panicln(err.Error())
}
result, err := stmt.Exec(id)
if err != nil {
log.Panicln(err.Error())
}
affected, _ := result.RowsAffected()
insertId, _ := result.LastInsertId()
return affected, insertId
}
步骤6、修改
// U 修改
func U(id int, username string) (int64, int64) {
_sql := `UPDATE "users" SET "username" = ? WHERE rowid = ?`
stmt, err := Db.Prepare(_sql)
if err != nil {
log.Panicln(err.Error())
}
result, err := stmt.Exec(username, id)
if err != nil {
log.Panicln(err.Error())
}
affected, _ := result.RowsAffected()
insertId, _ := result.LastInsertId()
return affected, insertId
}
步骤7、查询
// R 查询
func R(id int) [][]string {
_sql := `SELECT username,password FROM "users" WHERE "id" > ?`
stmt, err := Db.Prepare(_sql)
if err != nil {
log.Panicln(err.Error())
}
rows, err := stmt.Query(id)
if err != nil {
log.Panicln(err.Error())
}
var users [][]string
for rows.Next() {
var username, password string
err := rows.Scan(&username, &password)
if err != nil {
log.Panicln(err.Error())
}
users = append(users, []string{username, password})
}
return users
}
步骤8、单元测试
package demo01
import (
"database/sql"
"encoding/json"
"log"
"testing"
)
//初始化连接
func init() {
log.SetFlags(log.LstdFlags | log.Llongfile)
Db, err = sql.Open("sqlite3", "db.db")
if err != nil {
log.Println(err)
}
}
//增加
func TestC(t *testing.T) {
defer func(Db *sql.DB) {
err = Db.Close()
if err != nil {
log.Panicln(err.Error())
}
}(Db)
affected, insertId := C("user", "123456")
t.Log(affected, insertId)
}
//修改
func TestU(t *testing.T) {
defer func(Db *sql.DB) {
err = Db.Close()
if err != nil {
log.Panicln(err.Error())
}
}(Db)
affected, insertId := U(7, "ADMIN")
t.Log(affected, insertId)
}
//查询
func TestR2(t *testing.T) {
defer func(Db *sql.DB) {
err = Db.Close()
if err != nil {
log.Panicln(err.Error())
}
}(Db)
r := R(10)
bytes, _ := json.Marshal(r)
t.Log(string(bytes))
}
//删除
func TestD(t *testing.T) {
defer func(Db *sql.DB) {
err = Db.Close()
if err != nil {
log.Panicln(err.Error())
}
}(Db)
affected, insertId := D(1)
t.Log(affected, insertId)
}
本文暂时没有评论,来添加一个吧(●'◡'●)