百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

golang web从入门到精通 使用Sqlite3,让应用更加便捷

liebian365 2024-11-19 06:27 26 浏览 0 评论

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)
}

相关推荐

C#夯实基础-Lambda在List中的使用

在C#中基本类型比如List,Dictionary,数组等都有委托来实现相关的操作。此时Lambda表达式就可以使用了.实例1,查找字符串List的包含a的元素...

在C#中,如何实现对集合中元素的自定义排序?

在C#中,可以通过多种方式实现对集合中元素的自定义排序,主要包括:...

C++11 新特性面试题_c++ 11 面试题

1、C++11中引入了哪些新的智能指针类型?请描述它们的用法和区别。C++11中引入了三种新的智能指针类型:std::unique_ptr,std::shared_ptr,和std::weak_...

为什么要使用lambda表达式?原来如此,涨知识了

为什么要使用Lambda表达式先看几段Java8以前经常会遇到的代码:创建线程并启动...

[编程基础] Python lambda函数总结

Pythonlambda函数教程展示了如何在Python中创建匿名函数。Python中的匿名函数是使用lambda关键字创建的。...

硬核!Java 程序员必须掌握的 10 个 简化代码的 Lambda 表达式!

大家好,我是一位在架构师道路上狂奔的码农,今天给大家介绍一下程序员必须掌握的10个Lambda表达式,这些表达式几乎涵盖了在实际编程中经常用到的常见场景。相信通过这10个Lambda表...

一文读懂lambda表达式_lambda表达式由来

作者:youngyan,腾讯PCG数据工程工程师...

Java基础知识 - lambda 表达式_javalambda表达式用法

1、表达式语法1)lambda的命名采用的是数学符号λ;...

Python学习笔记 | 匿名函数lambda、映射函数map和过滤函数filter

什么是匿名函数?定义:没有函数名的自定义函数场景:函数体非常简单,使用次数很少,没有必要声明函数,通常搭配高阶函数使用。...

Java Lambda表达式详解(非常全面)

JavaLambda表达式是JDK8引入的,是一个比较重要的特性。@mikechenLambda表达式简介...

Python函数—lambda表达式_python中lambda函数的用法讲解

目录...

了解 Lambda:Python 中的单个表达式函数

Python中的lambda关键字提供了声明小型匿名函数的快捷方式。Lambda函数的行为与使用...

在C#中使用Lambda编写一个排序算法,比较其与传统排序算法的优劣

使用Lambda表达式编写排序算法在C#中,Lambda表达式可以用来简化排序逻辑的编写,尤其是在需要自定义排序规则时非常方便。以下示例展示了如何用Lambda表达式实现排序,并与传统排...

一日一技:python中的匿名函数 lambda用法

匿名函数lambda,语法如下:lambdaarguments:expression...

《回炉重造》——Lambda表达式_回炉重造是贬义词吗

前言Lambda表达式(LambdaExpression),相信大家对Lambda肯定是很熟悉的,毕竟我们数学上经常用到它,即λ。不过,感觉数学中的Lambda和编程语言中的Lamb...

取消回复欢迎 发表评论: