相信简单的使用golang语言,大家都会,可是很多时候,我们都离不开与数据库的交互,今天就介绍一下go语言,如何连接mysql

在没有连接上数据库之前,总是会碰到这样那样的报错,经过反复的思考和总结,今天就来说一下go语言连接mysql的一些坑吧

准备工作:

1.首先配置好go环境,即可以运行go语言

先测试一下go是否安装成功,如图用 cmd 输入go 按enter!

go 操作mysql封装 go语言mysql_go 操作mysql封装


出现此类帮助信息,则代表go安装成功!

1.2 接下来配置环境变量

如何设置环境变量,在上一节,已经提到过了,这次说一下重点,

1.2.1 GOROOT 环境变量

go 操作mysql封装 go语言mysql_go语言_02


这里配置的目录是go安装的目录

1.2.2 GOPATH

go 操作mysql封装 go语言mysql_golang_03


这里配置的目录是工作目录,也就是你要运行的程序的目录

就强调这两点

1.3在工作目录下添加三个子文件夹

go 操作mysql封装 go语言mysql_go 操作mysql封装_04


其中src代表存放的是要运行的文件如:hello.go

hello.go的内容

package main
import "fmt"
func main(){
fmt.Printf("Hello 百度回享")
}

打开cmd控制器然后输入go run hello.go

go 操作mysql封装 go语言mysql_mysql_05


注意一点只有你打开的目录是你的工作目录时才可以直接写hello.go若不是工作目录,这里就得写你自己的工作目录,如:go run F:/go/test/src/hello.go

若运行结果,如上图则go语言配置成功,接下来连接mysql

2.1 连接mysql之前先要下载mysql驱动

可以用cmd下载:如 :go get github.com/go-sql-driver/MYSQL

如果下载不到,就可以自己输入网址去下载,然后将它拷贝到src的文件夹下面

接下里的内容很关键,记住因为你下载的是这个目录:github.com/go-sql-driver/MYSQL,所以你如果使用cmd是话就会自动创建,而如果是自己考培的话就要加上目录,或者直接建一个mysql文件夹,将拷贝来的数据放到其下面,

2.2 接下来就要验证是否成功连接数据库

创建一个main.go,代码如下

package main
import(
    "database/sql"
    _"github.com/Go-SQL-Driver/MySQL"//就是你下载的文件地址,如果是自己拷贝的,那么就写自己创建的路径
    "log"
    //"reflect"    //获取变量类型用
)
// user中的数据根据自己要查询的表的数据做响应的改变,
type User struct{
    id int
    username string
    password string
    create_time string
    create_user string
    role_id int
    nick_name string
    remak string
}

 func main (){
 // db-user mysql账号
 // db-psw mysql密码
 // db-datebase 需要连接的数据库名称
    db,err := sql.Open("mysql","db-user:db-psw@tcp(localhost:3306)/db-database?charset=utf8")
    if err != nil{
            panic(err.Error())
            log.Println(err)
            return
    }
    defer db.Close()  //只有在前面用了 panic[抛出异常] 这时defer才能起作用,如果链接数据的时候出问题,他会往err写数据。defer:延迟,这里立刻申请了一个关闭sql 链接的草错,defer 后的方法,或延迟执行。在函数抛出异常一会被执行
    var user User
    select_sql := "select * from yttz_users  "
    select_err := db.QueryRow(select_sql).Scan(&user.id,&user.username,&user.password,&user.create_time,&user.create_user,&user.role_id,&user.nick_name,&user.remak)//查询一条,返回一条结果。并赋值到user这个结构体类型的变量中,就算查询到的是多条,单返回的还是一条,注意这里出现的数据,在user中必须存在否则会报错
    if select_err != nil {//如果没有查询到任何数据就进入if中err:no rows in result set
            log.Println(select_err)
            return
    }
    log.Println(user)
}

若出现你查询后的数据说明数据库连接成功,便会出现如下效果

go 操作mysql封装 go语言mysql_数据库_06