Go:依赖管理和Mysql开发

依赖管理介绍

1. 简介

            A. 所有的第三方包都放在$GOPATH的src目录下。

            B. 如果不同程序依赖的版本不一样,怎么管理

            C. 每个程序依赖的包,没有版本号的概念。

2. godep安装

            a. 安装方法: go get github.com/tools/godep

            b. 输入godep 命令,出现帮助信息

3. Godep使用

            A. godep save, 把程序所有依赖的第三包信息保存起来

            B. 生成Godep目录,保存第三包依赖的版本信息。

            C. 生成vendor目录, 保存所有依赖的第三方包。

4. 控制包搜索路径的优先级, Go 1.6之后版本支持

5. Godep开发流程

            A. 保证程序能正常编译。

            B. 执行godep save,保存当前所有第三方依赖的版本信息和代码 

            C. 提交Godeps目录和vendor目录到代码库。

            D. 如果要更新依赖的版本,可以直接修改Godeps.json文件

MYSQL开发

6. MYSQL常用引擎介绍

            A. MyIASM引擎。

                        1. 不支持事务。

                        2. 不支持行锁。

                        3. 读性能比较好。

            B. Innodb引擎。

                        1. 支持事务。

                        2. 支持行锁。

                        3. 整体性能比较好。

7. Golang中MYSQL驱动

            A. https://github.com/go-sql-driver/mysql

            B. Go本身不提供具体数据库驱动,只提供驱动接口和管理。

            C. 各个数据库驱动需要第三方实现,并且注册到Go中的驱动管理中。

8. Mysql驱动,注册示例

9. 导入Mysql驱动

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)

10. 连接数据库

func main() {
    dsn := "user:password@tcp(127.0.0.1:3306)/test"
    db, err := sql.Open("mysql",dsn)
    if err != nil {
        panic(err)
        return
    }
    defer db.Close()
}

11. 创建表

CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT ‘’,
`age` int(11) DEFAULT '0’,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

12. sql查询

            A. 单行查询, Db.QueryRow

            B 多行查询, Db.Query

13. Mysql 插入、更新和删除

            A. Db.Exec(query, args…interface{})(Result, error)

            B. 插入的主键id获取,Result. LastInsertId()

14. Mysql预处理

            A. 一般sql处理流程

                        1. 客户端拼接好sql语句

                        2. 客户端发送sql语句到mysql服务器

                        3. mysql服务器解析sql语句并执行, 把执行结果发送给客户端

            B. 预处理处理流程

                        1. 把sql分为两部分,命令部分和数据部分。

                        2. 首先把命令部分发送给mysql服务器,mysql进行sql预处理

                        3. 然后把数据部分发送给mysql服务器,mysql进行占位符替换

                        4. mysql服务器执行sql语句并返回结果给客户端

15. Mysql预处理优势

            A. 同一条sql反复执行,性能会很高。

            B. 避免sql注入问题

16. Mysql预处理实例

            A. 查询操作,

                        1. Db.Prepare(sql string) (*sql.Stmt, error)

                        2. Stmt.Query()

            B. 更新操作(插入、更新、delete)

                        1. Db.Prepare(sql string) (*sql.Stmt, error)

                        2. Stmt.Exec()

17. Mysql事务

            A. 应用场景,

                        1. 同时更新,多个表。

                        2. 同时更新多行数据。

            B. 事务的ACID

                        1. 原子性

                        2. 一致性

                        3. 隔离性

                        4. 持久性

18. Mysql事务实例 

            A. Db.Begin(),开启一个事务

            B. Db.Commit(),提交一个事务

            C. Db.Rollback(),回滚一个事务

19. sqlx库介绍与使用

            A. 使用更简单

            B. 支持多数据库,mysql、postgresql、oracle、sqlite

20. sqlx库介绍与使用

            A. 查询, sqlx.DB.Get和sqlx.DB.Select

            B. 更新、插入和删除,sqlx.DB.Exec

            C. 事务,sqlx.DB.Begin()、sqlx.DB.Commit、sqlx.DB.rollback

21. sql注入分析

            A. Select *from user where name = ‘%s’, 构造name=“1 ' or 1 = 1 or ‘”

            B. 构造name=123' and (select count(*) from user ) > 10#

            C. 构造name=123' union select *from user #

避免手动拼接sql, 使用占位符或预处理!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值