既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

C:\Users\lenovo>sqlite3 C:\Users\lenovo\Desktop\test.db // 创建数据库

sqlite> .databases // 显示数据库信息

sqlite> .quit // 退出sqlite3的shell程序环境

sqlite> .open test.db // 创建数据库

新手注意,这里有一个坑,是在cmd(在命令行)中输入,而不是打开sqlite3后在shell中输入。输入 .databases 就会显示刚创建的数据库信息(能看到创建的数据库文件及地址路径信息);输入.quit 就会退出sqlite3的shell程序环境。进入SQLite后,输入 .open 数据库名.db 方式,也可以创建数据库,如果数据库文件已经建立,则打开。这种方式不支持自定义路径。

创建表:CREATE TABLE database_name.table_name(column1 datatype PRIMARY KEY(one or more columns),column2 datatype,…);

sqlite> CREATE TABLE express_orders (id INTEGER PRIMARY KEY NOT NULL,uid INTEGER NOT NULL,weight DOUBLE NOT NULL,created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP); // 创建表

sqlite> .schema // 查看所有表结构

sqlite> .tables // 查看所有表

插入数据(insert): INSERT INTO TABLE_NAME (column1, column2, column3,…columnN) VALUES (value1, value2, value3,…valueN); INSERT INTO TABLE_NAME VALUES (value1,value2,value3,…valueN);

sqlite> INSERT INTO express_orders (uid,weight) VALUES (1685040228039,0.9);

sqlite> INSERT INTO express_orders (uid,weight) VALUES (1685040500698,67.9942);

sqlite> INSERT INTO express_orders (uid,weight) VALUES (1685040524994,99.99);

sqlite> INSERT INTO express_orders (uid,weight) VALUES (1685040559781,100);

查询数据(select): SELECT * FROM table_name;(查询所有字段) SELECT column1, column2, columnN FROM table_name;(查询指定字段) SELECT * FROM table_name where column1 = 指定信息;(在限制条件下查询指定信息)

sqlite> SELECT \* FROM express_orders;

sqlite> SELECT uid,weight FROM express_orders;

sqlite> SELECT \* FROM express_orders where id > 1;

sqlite> .header on // 开启头部显示

sqlite> .mode column // 设置输出模式,左对齐的列

sqlite> SELECT \* FROM express_orders;

sqlite> .timer on // 开启 CPU 定时器

sqlite> SELECT \* FROM express_orders;

创建索引(Index):CREATE INDEX index_name ON table_name (column_name);

sqlite> CREATE INDEX index_uid ON express_orders (uid); // 创建索引

sqlite> .schema // 查看所有表结构

3、SQLite 可视化管理工具

SQLiteStudio是一个开源、跨平台的 SQLite 可视化管理工具。免费,多语言界面,支持 Linux,Mac 和 Windows。官方网址SQLiteStudio。

五、Go 语言使用 SQLite 数据库

1、安装 go-sqlite3

在安装go-sqlite3之前,需要先安装SQLite数据库,在Golang中通过 go get 命令安装 go-sqlite3:

go get github.com/mattn/go-sqlite3

2、安装 mingw64

在实践中我们发现,只安装 go-sqlite3 是不可以的,无法和数据库建立连接,会报以下错误:

# github.com/mattn/go-sqlite3

cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH%

报错意思是缺少 gcc 环境,我们需要装一个 gcc 环境。因为 go里面使用sqlite,实际上是要下载sqlite的源代码编译的,当然,使用的时候不用手动编译,在linux中,gcc 如果已经安装了,是不用担心的,但是在windows中,为了支持编译,必须使用 mingw64。下载后缀为 posix-seh 的,mingw64下载地址。

解压下载好的文件放置任一目录,随后将 bin 目录添加进 path 环境变量中,打开 cmd ,输入 gcc -v ,如正确显示版本号则安装成功,然后重启 goland 即可。

如果你发现在 cmd 中已经能够找到 gcc 命令,但是goland 中执行程序还是找不到的话,那么多半就是 goland 的环境变量还未刷新,重启电脑、或者清空goland全部缓存并重启,即可解决。

3、连接数据库

package main

import (

"database/sql"

"fmt"

// 导入包,导入前缀为下划线,则init函数被执行,然后注册驱动。

\_ "github.com/mattn/go-sqlite3"

"log"

)

var db \*sql.DB

var err error

func main() {

// Open() 函数指定驱动名称和数据源名称

db, err = sql.Open("sqlite3", "data.db")

if err != nil {

fmt.Printf("Database creation failed: %v\n", err)

return

}

// 调用db.Close() 函数,确保关闭数据库并阻止启动新的查询

defer db.Close()

var version string

// QueryRow() 执行查询,返回版本号

err = db.QueryRow("SELECT SQLITE\_VERSION()").Scan(&version)

if err != nil {

fmt.Printf("Database creation failed: %v\n", err)

return

}

// 连接成功,打印出"database connected:版本号"

fmt.Printf("Database creation successful: %v\n", version)

}

4、创建数据表

package main

import (

"database/sql"

"fmt"

// 导入包,导入前缀为下划线,则init函数被执行,然后注册驱动。

\_ "github.com/mattn/go-sqlite3"

)

func main() {

// Open() 函数指定驱动名称和数据源名称

db, err = sql.Open("sqlite3", "data.db")

if err != nil {

fmt.Printf("Database creation failed: %v\n", err)

return

}

// 调用db.Close() 函数,确保关闭数据库并阻止启动新的查询

defer db.Close()

connectDB()

createTable()

}

var db \*sql.DB

var err error

// 连接数据库

func connectDB() {

var version string

// QueryRow() 执行查询,返回版本号

err = db.QueryRow("SELECT SQLITE\_VERSION()").Scan(&version)

if err != nil {

fmt.Printf("Database creation failed: %v\n", err)

return

}

// 连接成功,打印出"database connected:版本号"

fmt.Printf("Database creation successful: %v\n", version)

}

// 创建数据库表

func createTable() {

// 建表语句

sts := `

CREATE TABLE express\_orders (

id INTEGER PRIMARY KEY NOT NULL,

uid INTEGER NOT NULL,

weight DOUBLE NOT NULL,

created\_at DATETIME NOT NULL DEFAULT CURRENT\_TIMESTAMP

);`

// 使用db.Exec() 函数来执行 SQL 语句

\_, err = db.Exec(sts)

if err != nil {

fmt.Printf("Failed to create database table: %v\n", err)

return

}

fmt.Printf("Successfully created database table! \n")

}

5、插入数据

package main

import (

"database/sql"

"fmt"

// 导入包,导入前缀为下划线,则init函数被执行,然后注册驱动。

\_ "github.com/mattn/go-sqlite3"

)

func main() {

// Open() 函数指定驱动名称和数据源名称

db, err = sql.Open("sqlite3", "data.db")

if err != nil {

fmt.Printf("Database creation failed: %v\n", err)

return

}

// 调用db.Close() 函数,确保关闭数据库并阻止启动新的查询

defer db.Close()

connectDB()

insert(1, 0.81192)

}

var db \*sql.DB

var err error

// 连接数据库

func connectDB() {

var version string

// QueryRow() 执行查询,返回版本号

err = db.QueryRow("SELECT SQLITE\_VERSION()").Scan(&version)

if err != nil {

fmt.Printf("Database creation failed: %v\n", err)

return

}

// 连接成功,打印出"database connected:版本号"

fmt.Printf("Database creation successful: %v\n", version)

}

// 插入数据

func insert(uid int, weight float64) {

// 插入语句

res, err := db.Exec("INSERT INTO express\_orders(uid, weight) VALUES(?,?)", uid, weight)

if err != nil {

fmt.Printf("Insert data failed: %v\n", err)

return

}

// 获取自增ID

lastInsertId, \_ := res.LastInsertId()

fmt.Printf("Successfully inserted data, lastInsertId = %v\n", lastInsertId)

}

6、查询数据

package main

import (

"database/sql"

"fmt"

// 导入包,导入前缀为下划线,则init函数被执行,然后注册驱动。

\_ "github.com/mattn/go-sqlite3"

)

func main() {

// Open() 函数指定驱动名称和数据源名称

db, err = sql.Open("sqlite3", "data.db")

if err != nil {

fmt.Printf("Database creation failed: %v\n", err)

return

}

// 调用db.Close() 函数,确保关闭数据库并阻止启动新的查询

defer db.Close()

connectDB()

ret := query(1)

fmt.Println(ret)

}

var db \*sql.DB

var err error

// 连接数据库

func connectDB() {

var version string

// QueryRow() 执行查询,返回版本号

err = db.QueryRow("SELECT SQLITE\_VERSION()").Scan(&version)

if err != nil {

fmt.Printf("Database creation failed: %v\n", err)

return

}

// 连接成功,打印出"database connected:版本号"

fmt.Printf("Database creation successful: %v\n", version)

}

// 查询数据

func query(uid int) (weightList []float64) {

// 结果重量集合

weightList = make([]float64, 0)

// 查询语句

rows, err := db.Query("SELECT weight FROM express\_orders WHERE uid = ?", uid)

if err != nil {

fmt.Printf("Failed to query data: %v\n", err)

return

}

for rows.Next() {

var weight float64

err = rows.Scan(&weight)

if err != nil {

fmt.Printf("Failed to read data: %v\n", err)

continue

}

weightList = append(weightList, weight)

}

return weightList

}

六、实践(运费清单计算和测试程序)

问题 1 代码如下:

package main

import (

"fmt"

"math"

)

func main() {

var weight float64

fmt.Print("请输入实际重量(单位:KG):")

fmt.Scanf("%f", &weight)

if weight > 0 && weight <= 100 {

fee := compute(weight)

fmt.Printf("快递费用为 %d 元。\n", fee)

} else {

fmt.Println("实际重量输入错误!!!")

}

}

// 计算快递费用

func compute(number float64) int {

// 快递费用

fee := 0

// 计费重量,实际重量向上取整

weight := int(math.Ceil(number))

// 计算费用

switch weight == 1 {

case false:

newFee := float64(18)

for i := 2; i <= weight; i++ {

newFee = 5 + newFee\*1.01

}

newFee = math.Round(newFee)

fee = int(newFee)

default:

fee = 18

}

return fee

}

测试:输入0 测试:输入0.81192 测试:输入2.996 测试:输入99.99 测试:输入100

测试:输入101

问题 2 :

生成数据的代码:

package main

import (

"database/sql"

"fmt"

"math/rand"

"sort"

"sync"

// 导入包,导入前缀为下划线,则init函数被执行,然后注册驱动。

\_ "github.com/mattn/go-sqlite3"

)

var db \*sql.DB

var err error

func main() {

db, err = sql.Open("sqlite3", "data.db")

if err != nil {

fmt.Printf("Database creation failed: %v\n", err)

return

}

// 调用db.Close() 函数,确保关闭数据库并阻止启动新的查询

defer db.Close()

// 连接数据库

connectDB()

// 创建数据库表

//createTable()

// 生成 1000 个用户 id

createUid()

var wg sync.WaitGroup

wg.Add(10)

// 创建 10 个协程,同时往数据库里插数据

for i := 0; i < 10; i++ {

go func() {

// 生成 100000 条订单记录并插入数据库中

createRecords()

}()

}

wg.Wait()

}

// 用户 id

var uidList = make([]int, 1000)

// 生成 1000 个用户 id

func createUid() {

for i := 0; i < 1000; i++ {

![img](https://img-blog.csdnimg.cn/img_convert/faa30e4f0834093b94d1a8128a86305b.png)

![img](https://img-blog.csdnimg.cn/img_convert/b9986dac67ec2ee1283db46b659380de.png)

![img](https://img-blog.csdnimg.cn/img_convert/8dcc68368f9f52281b9c708f72d4a9df.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

unc() {

// 生成 100000 条订单记录并插入数据库中

createRecords()

}()

}

wg.Wait()

}

// 用户 id

var uidList = make([]int, 1000)

// 生成 1000 个用户 id

func createUid() {

for i := 0; i < 1000; i++ {

[外链图片转存中...(img-w8752ZqY-1715372279213)]

[外链图片转存中...(img-MRPFJC0u-1715372279213)]

[外链图片转存中...(img-nXbp4ZDy-1715372279214)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

文章链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。