一起来学GO语言11--简单数据库操作mysql

本文详细介绍使用Go语言和mysql数据库进行CRUD操作的过程,包括环境配置、外部包安装、数据库连接初始化及增删改查代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里来做一个数据库操作,使用的数据库是mysql数据库,版本5.7,开发环境win10,开发工具liteIDE x35.1

这里先来说一下使用的两个外部包

github.com/Unknwon/goconfig:用来读取.ini文件

github.com/go-sql-driver/mysql:数据库补充包

首先引入外部引用包,这里由于是自学新手,刚开始一直引入不了,研究了好久才搞定,所以将步骤详细的记录了下来。

1、配置环境变量GOPATH,值是什么呢,值就是我们自己的工作空间,编译-->编译配置,可以看到我们自己的GOPATH

只有 在环境变量中配置了这个才可以安装,不知道有没有其它的方式

2、安装外部包

在dos中输入命令命令,等待安装完成

go get github.com/go-sql-driver/mysql
go get github.com/Unknwon/goconfig

到这里外部包的安装就完成了,下面直接看代码:

建表语句:

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `no` varchar(45) COLLATE utf8_bin NOT NULL,
  `name` varchar(45) COLLATE utf8_bin DEFAULT NULL,
  `score` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

代码:

// demo project main.go
package main

import (
	"database/sql"
	"log"
	"strings"

	goconfig "github.com/Unknwon/goconfig"
	_ "github.com/go-sql-driver/mysql"
)

//定义一个和表对应的结构体
type Student struct {
	id    int
	no    string //学号
	name  string //姓名
	score uint   //成绩
}

//读取数据库配置文件
func readDatabaseConf() (string, error) {
	cfg, err := goconfig.LoadConfigFile("database.ini") //加载配置文件
	if err != nil {
		return "", err
	}
	//读取数据
	userName, _ := cfg.GetValue("mysql", "userName")
	password, _ := cfg.GetValue("mysql", "password")
	host, _ := cfg.GetValue("mysql", "host")
	port, _ := cfg.GetValue("mysql", "port")
	schema, _ := cfg.GetValue("mysql", "schema")
	//将数据转换成数据库url作为返回值
	url := strings.Join([]string{userName, ":", password, "@tcp(", host, ":", port, ")/", schema}, "")
	return url, nil
}

//初始化数据库连接
func InitDatabase() (*sql.DB, error) {
	url, err := readDatabaseConf()
	if err != nil {
		log.Printf("init database error:%v", err)
		return nil, err
	}
	db, err := sql.Open("mysql", url)
	if err != nil {
		log.Printf("open database error:%v", err)
		return nil, err
	}
	return db, nil
}

//执行增、改、删任务
func Execute(db *sql.DB, sql string, params ...interface{}) error {
	stmt, _ := db.Prepare(sql) //预编译
	defer stmt.Close()
	_, err := stmt.Exec(params...)
	if err != nil {
		log.Printf("execute sql error:%v\n", err)
		return err
	}
	log.Println("execute sql success")
	return nil
}

//查询数据库数据
func QueryData(db *sql.DB, sql string, params ...interface{}) (*sql.Rows, error) {
	stmt, _ := db.Prepare(sql)
	defer stmt.Close()
	rows, err := stmt.Query(params...)
	if err != nil {
		log.Printf("query data error:%v", err)
		return nil, err
	}
	log.Println("query data success")
	return rows, nil
}

func main() {
	db, err := InitDatabase()
	defer db.Close()
	if err != nil {
		log.Println(err)
		return
	}
	//增
	insertSql := "insert into student(no, name, score) values(?, ?, ?)"
	err = Execute(db, insertSql, "123456", "Jack", 95)
	if err != nil {
		log.Printf("insert data error : %v\n", err)
		return
	}
	//查
	querySql := "select id, no, name, score from student where name = ?"
	rows, err := QueryData(db, querySql, "Jack")
	defer rows.Close()
	if err != nil {
		log.Printf("query data error:%v\n", err)
		return
	}
	s := new(Student)

	for rows.Next() {
		rows.Scan(&s.id, &s.no, &s.name, &s.score)
		log.Println(*s)
	}
	//改
	updateSql := "update student set name = ? where no = ?"
	Execute(db, updateSql, "Rose", "123456")
	//删
	//deleteSql := "delete from student"
	//Execute(db, deleteSql)

}

代码也没有什么好说的,就是注意用完的连接记得要关闭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值