go 用 mysql web开发环境_Golang-Web(连接Mysql)

本文详细介绍了如何在Golang环境中配置MySQL驱动并进行数据库的连接,包括使用`go get`命令下载驱动、手动下载配置,以及创建、读取、更新和删除数据库记录的操作示例。文章还强调了防止SQL注入的重要性。
摘要由CSDN通过智能技术生成

一.驱动包简介

驱动包:任何编程语言想要连接数据库必须由数据库生产厂商提供了统一数据库调用而开发的内容

Golang的MySQL驱动包可以在github中下载到

二.go get

go get命令可以远程下载指定内容,支持git

github要求下载内容必须通过git客户端,所以当直接使用go get命令后会提示错误

在命令行中运行命令

需要注意的是:前提已经安装好git客户端(安装包已经放在02资料中)go get github.com/go-sql-driver/mysql

如果没有安装git客户端会出现下面错误信息

583ab84cdf42947f78b99213eb8f4b6f.png

安装了git后运行命令会自动下载到%GOPATH%/src中

处一定注意:安装了git后必须重新打开命令行,否者git环境变量不生效

进入src把内容复制到%GOROOT%/src中

由于环境变量中GOPATH可能与Goland中配置的GOPATH不同,所以此处建议放入到%GOROOT%/src中,这样可以保证切换GOPATH也可以加载到驱动包

复制完效果如下

6720d7ab5631987e70726de8004adcbc.png

三.手动下载配置

如果不希望安装git也可以手动下载,进入网址点击右侧”Download ZIP”

900fc86ef4dda2de7218a94606a98a4c.png

在%GOROOT%/src下新建3级文件夹github.com/go-sql-driver/mysql,把ZIP解压后mysql-master里面全部代码放入到mysql(github.com/go-sql-driver/mysql)文件夹中

四.数据库准备

在MySQL中新建数据库名称first

新建表create table people(

id int primary key auto_increment,

name varchar(20),

address varchar(20)

)

代码实现

全部代码package main

import (

"fmt"

//驱动已经放入到标准库文件夹,由于不使用所以需要空导入,在前面添加_

_ "github.com/go-sql-driver/mysql" //如果包名显示红色表示未引入,需要将下载的mysql驱动拷

//贝到%GOROOT%\src下,这样即使更换GOPATH也能引用到。

//Golang中数据库操作包

"database/sql"

)

func main() {

/*

第一个参数:连接什么数据库

第二个参数:连接字符串

语法:数据库登录用户名:密码@tcp(mysql主机ip:端口)/database名称

*/

db,err:=sql.Open("mysql","root:root@tcp(localhost:3306)/first")

db.Ping()

//Error处理

if err!=nil{

fmt.Println("数据库连接失败")

}

//关闭连接

defer func() {

if db!=nil{

db.Close()

}

fmt.Println("关闭连接")

}()

/*

准备处理SQL语句

支持占位符,防止SQL注入

*/

stmt,err:=db.Prepare("insert into people values(default,?,?)")

//错误处理

if err!=nil{

fmt.Println("预处理失败",err)

}

//关闭对象

defer func() {

if stmt!=nil{

stmt.Close()

}

}()

/*

Exec() 参数为不定项参数,对应占位符?个数

*/

res,err:=stmt.Exec("张三","海淀")

//错误处理

if err!=nil{

fmt.Println("执行SQL出现错误")

}

//获取生成主键

id,err:=res.LastInsertId()

if err!=nil{

fmt.Println("获取主键失败",err)

}

//受影响行数

count,err:=res.RowsAffected()

if err!=nil{

fmt.Println("获取结果失败",err)

}

fmt.Println(id,count)

if count>0{

fmt.Println("新增成功")

}else{

fmt.Println("新增失败")

}

}

修改注意点

修改和新增类似,只是不需要获取LastInsertId()和SQL语句是修改语句

在Golang中要求:如果修改前和修改后的值相同,RowsAffected()返回0

代码实现

package main

import (

"fmt"

//驱动已经放入到标准库文件夹,由于不使用所以需要空导入,在前面添加_

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

//Golang中数据库操作包

"database/sql"

)

func main() {

/*

第一个参数:连接什么数据库

第二个参数:连接字符串

语法:数据库登录用户名:密码@tcp(mysql主机ip:端口)/database名称

*/

db,err:=sql.Open("mysql","root:root@tcp(localhost:3306)/first")

db.Ping()

//Error处理

if err!=nil{

fmt.Println("数据库连接失败")

}

//关闭连接

defer func() {

if db!=nil{

db.Close()

fmt.Println("关闭连接")

}

}()

/*

准备处理SQL语句

支持占位符,防止SQL注入

*/

stmt,err:=db.Prepare("update people set name=?,address=? where id=?")

//错误处理

if err!=nil{

fmt.Println("预处理失败",err)

}

//关闭对象

defer func() {

if stmt!=nil{

stmt.Close()

fmt.Println("stmt关闭")

}

}()

/*

Exec() 参数为不定项参数,对应占位符?个数

*/

res,err:=stmt.Exec("李四","朝阳",1)

//错误处理

if err!=nil{

fmt.Println("执行SQL出现错误")

}

//受影响行数

count,err:=res.RowsAffected()

if err!=nil{

fmt.Println("获取结果失败",err)

}

if count>0{

fmt.Println("修改成功")

}else{

fmt.Println("修改失败")

}

}

删除注意点

删除和修改、新增结构一样,区别为SQL语句

在Go语言中要求如果要删除的数据不存在RowsAffected()返回0

代码实现

package main

import (

"fmt"

//驱动已经放入到标准库文件夹,由于不使用所以需要空导入,在前面添加_

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

//Golang中数据库操作包

"database/sql"

)

func main() {

/*

第一个参数:连接什么数据库

第二个参数:连接字符串

语法:数据库登录用户名:密码@tcp(mysql主机ip:端口)/database名称

*/

db,err:=sql.Open("mysql","root:root@tcp(localhost:3306)/first")

db.Ping()

//Error处理

if err!=nil{

fmt.Println("数据库连接失败")

}

//关闭连接

defer func() {

if db!=nil{

db.Close()

fmt.Println("关闭连接")

}

}()

/*

准备处理SQL语句

支持占位符,防止SQL注入

*/

stmt,err:=db.Prepare("delete from people where id=?")

//错误处理

if err!=nil{

fmt.Println("预处理失败",err)

}

//关闭对象

defer func() {

if stmt!=nil{

stmt.Close()

fmt.Println("stmt关闭")

}

}()

/*

Exec() 参数为不定项参数,对应占位符?个数

*/

res,err:=stmt.Exec(1)

//错误处理

if err!=nil{

fmt.Println("执行SQL出现错误")

}

//受影响行数

count,err:=res.RowsAffected()

if err!=nil{

fmt.Println("获取结果失败",err)

}

if count>0{

fmt.Println("删除成功")

}else{

fmt.Println("删除失败")

}

}

查询注意点

Golang中执行查询与新增、删除、修改中stmt的执行方法有区别,由于需要把查询到的结果取出来,所以还需要进行取值处理

代码示例

package main

import (

"fmt"

//驱动已经放入到标准库文件夹,由于不使用所以需要空导入,在前面添加_

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

//Golang中数据库操作包

"database/sql"

)

func main() {

/*

第一个参数:连接什么数据库

第二个参数:连接字符串

语法:数据库登录用户名:密码@tcp(mysql主机ip:端口)/database名称

*/

db,err:=sql.Open("mysql","root:root@tcp(localhost:3306)/first")

db.Ping()

//Error处理

if err!=nil{

fmt.Println("数据库连接失败")

}

//关闭连接

defer func() {

if db!=nil{

db.Close()

fmt.Println("关闭连接")

}

}()

/*

准备处理SQL语句

支持占位符,防止SQL注入

*/

stmt,err:=db.Prepare("select * from people") //查询所有

//stmt,err:=db.Prepare("select * from people where id=?") //根据id查询

//错误处理

if err!=nil{

fmt.Println("预处理失败",err)

}

//关闭对象

defer func() {

if stmt!=nil{

stmt.Close()

fmt.Println("stmt关闭")

}

}()

/*

Exec() 参数为不定项参数,对应占位符?个数

*/

rows,err:=stmt.Query() //查询所有

//rows,err:=stmt.Query(1) //根据id查询数据

if err!=nil{

fmt.Println("查询失败",err)

}

//循环遍历结果

for rows.Next(){

var id int

var name,address string

//把行内值付给变量

rows.Scan(&id,&name,&address)

fmt.Println(id,name,address)

}

defer func() {

if rows!=nil{

rows.Close()

fmt.Println("关闭结果集")

}

}()

}

作者: qq_31387691

链接: https://blog.csdn.net/qq_31387691/article/details/109305774

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

到此这篇关于“Golang-Web(连接Mysql)”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持Go语言编程网!

相关文章:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值