go语言访问者 go语言进程( 二 )


您将使用指向结构的指针sql.DB,它表示对特定数据库的访问 。
编写代码
1、进入 main.go,在import您刚刚添加的代码下方,粘贴以下 Go 代码以创建数据库句柄 。
在此代码中:
(3)使用 MySQL 驱动程序Config和FormatDSN类型以收集连接属性并将它们格式化为连接字符串的 DSN 。
该Config结构使代码比连接字符串更容易阅读 。
(4)调用sql.Open 初始化db变量,传递 FormatDSN 。
(5)检查来自 的错误sql.Open 。例如,如果您的数据库连接细节格式不正确,它可能会失败 。
为了简化代码,您调用log.Fatal结束执行并将错误打印到控制台 。在生产代码中 , 您会希望以更优雅的方式处理错误 。
(6)调用DB.Ping以确认连接到数据库有效 。在运行时, sql.Open可能不会立即连接,具体取决于驱动程序 。您在Ping此处使用以确认 database/sql包可以在需要时连接 。
(7)检查来自Ping的错误,以防连接失败 。
(8)Ping如果连接成功,则打印一条消息 。
文件的顶部现在应该如下所示:
3、保存 main.go 。
1、开始跟踪 MySQL 驱动程序模块作为依赖项 。
使用go get 添加 github.com/go-sql-driver/mysql 模块作为您自己模块的依赖项 。使用点参数表示“获取当前目录中代码的依赖项” 。
2、在命令提示符下 , 设置Go 程序使用的DBUSER和DBPASS环境变量 。
在 Linux 或 Mac 上:
在 Windows 上:
3、在包含 main.go 的目录中的命令行中,通过键入go run来运行代码 。
连接成功了!
接下来,您将查询一些数据 。
go语言的map多协程访问时需要加锁吗go语言go语言访问者的map多协程访问时需要加锁
支持==和!=操作就可以做keygo语言访问者,实际上只有function、map、slice三个kind不支持作为keygo语言访问者 , 因为只能和nil比较不能和另一个值比较 。布尔、整型、浮点、复数、字符串、指针、channel等都可以做key 。
struct能不能做key要看每一个字段go语言访问者 , 如果所有字段都可以做key , 那这个struct就可以 。有一个字段不能做key,这个struct就不能做key 。array也是,元素类型能做key,那这个array就可以 。
例如go语言访问者:
type Foo map[struct {
Bbool
Iint
Ffloat64
Ccomplex128
Sstring
P*Foo
Ch chan Foo
}]bool
每一个字段都可以做key,Foo就可以做key 。再如:
type Foo map[struct {
Fn func() Foo
Mmap[*Foo]int
S[]Foo
}]bool
有一个字段不能做key、Foo就不允许做key,而这三个字段都不能 。
字段是递归检查的:
type Foo map[struct {
Sub struct {
M map[*Foo]bool
}
}]bool
Sub的M字段不能做key,Sub就不能做key,Foo也就不能做key 。
总之想把一个数据结构用于map的key,就不能包含function、map和slice 。
GO语言(三十二):访问关系型数据库(下)在本节中,您将使用 Go 执行 SQL INSERT语句以向数据库添加新行 。
您已经了解了如何使用Query和QueryRow处理返回数据的 SQL 语句 。要执行不返回数据的 SQL 语句,请使用Exec.
1、在albumByID下面,粘贴以下addAlbum函数以在数据库中插入新专辑,然后保存 main.go 。
在此代码中:
(1)用DB.Exec执行INSERT语句 。
Exec接受一条 SQL 语句,后跟 SQL 语句的参数值 。
(2)检查尝试INSERT中的错误 。
(3)使用Result.LastInsertId检索插入的数据库行的 ID。
(4)检查尝试检索 ID 的错误 。
2、更新main以调用新addAlbum函数 。
在main函数末尾添加以下代码 。

推荐阅读