网站首页 > 文章中心 > 其它

go语言sql词法分析

作者:小编 更新时间:2023-08-10 14:31:32 浏览量:85人看过

Golang database/sql源码分析

Gorm是Go语言开发用的比较多的一个ORM.它的功能比较全:

但是这篇文章中并不会直接看Gorm的源码,我们会先从database/sql分析.原因是Gorm也是基于这个包来封装的一些功能.所以只有先了解了database/sql包才能更加好的理解Gorm源码.

database/sql 其实也是一个对于mysql驱动的上层封装."github.com/go-sql-driver/mysql"就是一个对于mysql的驱动,database/sql 就是在这个基础上做的基本封装包含连接池的使用

下面这个是最基本的增删改查操作

操作分下面几个步骤:

因为Gorm的连接池就是使用database/sql包中的连接池,所以这里我们需要学习一下包里的连接池的源码实现.其实所有连接池最重要的就是连接池对象、获取函数、释放函数下面来看一下database/sql中的连接池.

DB对象

go语言sql词法分析-图1

获取方法

释放连接方法

连接池的实现有很多方法,在database/sql包中使用的是chan阻塞 使用map记录等待列表,等到有连接释放的时候再把连接传入等待列表中的chan 不在阻塞返回连接.

之前我们看到的Redigo是使用一个chan 来阻塞,然后释放的时候放入空闲列表,在往这一个chan中传入struct{}{},让程序继续 获取的时候再从空闲列表中获取.并且使用的是链表的结构来存储空闲列表.

database/sql 是对于mysql驱动的封装,然而Gorm则是对于database/sql的再次封装.让我们可以更加简单的实现对于mysql数据库的操作.

go语言中使用mysql sql语句

go语言sql词法分析-图2

Go语言操作数据库非常的简单,

他也有一个类似JDBC的东西"database/sql"

实现类是"github.com/go-sql-driver/mysql"

使用过JDBC的人应该一看就懂

对日期的处理比较晦涩,没有JAVA流畅:

复制代码代码如下:

package main

import (

"database/sql"

_ "github.com/go-sql-driver/mysql"

"log"

"time"

)

/*

create table t(

id int primary key auto_increment,

ts timestamp

);

*/

go语言sql词法分析-图3

func insert(db *sql.DB) {

stmt, err := db.Prepare("insert into t(name,ts) values(?,?)")

defer stmt.Close()

if err != nil {

log.Println(err)

return

}

stmt.Exec("edmond", ts)

func main() {

log.Fatalf("Open database error: %s\n", err)

defer db.Close()

err = db.Ping()

log.Fatal(err)

如何用Go语言打造一个高性能MySQL Proxy

首选进行登录验证,验证过程完全兼容MySQL认证协议,由于用户名和密码在配置文件中已经设置好,所以可以利用该信息验证连接请求是否合法.

以上就是土嘎嘎小编为大家整理的go语言sql词法分析相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章