一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第9天,点击查看活动详情。
前言
本瞎写脚本专题主要是记录使用 golang 一些问题和思考,当然也会将一部分隐私的部分屏蔽掉,只给出一小部分的内容。
连接 MySQL
golang 中常用就是 database/sql 包进行数据库操作,其提供了很多轻量级的数据库操作的接口。如下,可以导入驱动包和 mysql 操作库。
"github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
初始化数据库对象, 通过使用 sqlx.Open 创建一个数据库对象 DB。
func InitMiddleware() {
database, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/localtest")
if err != nil {
fmt.Println("open mysql failed,", err)
return
}
Db = database
defer Db.Close()
}
open 的第一个参数是驱动名称,第二个参数是连接驱动的地址
func Query(db *sqlx.DB) {
rows, err := db.Query("select * from users")
if err != nil {
fmt.Println("查询失败", err)
}
for rows.Next() {
rows.Scan()
// 将数据加入到数组对象内
}
}
func Create(db *sqlx.DB) {
result, err := db.Exec("insert into user(name,age)")
if err != nil {
fmt.Print("添加失败")
}
newId, _ := result.LastInsertId()
i, _ := result.RowsAffected()
fmt.Printf("新增的数据ID:%d , 受影响行数:%d \n", newId, i)
}
Query () 函数用来直接执行 Sql 返回 Rows 结果。Exec () 函数用来执行 stmt 准备好的 SQL,其中执行后得到的结果,RowsAffected 是求受影响的行数,LastInsertId是求插入的最后一行 ID
当然,也支持其他类型的数据库,比如 SQLite ,PostgreSQL等。只要下载相关的数据库的驱动,并使用驱动对应的数据库连接地址即可
连接 Redis
同样,也支持 NOSQL 类型的数据库操作 ,比如 Redis,使用 redisgo 驱动。
使用 redisgo 包
创建一个 redis 连接池,使用 chan 方式进行对 redis 操作关闭,当接收到异常,中断等信息时,关闭 redis 连接
func InitRedis() {
RedisPool = &redis.Pool{
MaxIdle: 3,
IdleTimeout: 240 * time.Second,
Dial: func() (redis.Conn, error) {
c, err := redis.Dial("tcp", ":6379")
if err != nil {
return nil, err
}
return c, err
},
}
close()
}
func close() {
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
signal.Notify(c, syscall.SIGTERM)
signal.Notify(c, syscall.SIGKILL)
go func() {
<-c
RedisPool.Close()
os.Exit(0)
}()
}
还有另外一个包可以进行 redis 操作 gopkg.in/redis.v4
使用 gopkg.in/redis.v4
// 创建 redis 客户端
func createClient() *redis.Client {
redisClient := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "123456",
DB: 0,
})
// Ping 来检查是否成功连接到了 redis 服务器
result, err := redisClient.Ping().Result()
fmt.Println(result, err)
return redisClient
}