package db import ( _"github.com/go-sql-driver/mysql" "database/sql" "fmt" "strings" ) // 教程 // https://www.jianshu.com/p/ee87e989f149 //数据库配置 const ( userName = "go_test" password = "R4MSD57Gmr42CRTw" ip = "27.102.70.190" port = "3306" dbName = "go_test" ) //Db数据库连接池 var DB *sql.DB //注意方法名大写,就是public func InitDB() bool { //构建连接:"用户名:密码@tcp(IP:端口)/数据库?charset=utf8" path := strings.Join([]string{userName, ":", password, "@tcp(",ip, ":", port, ")/", dbName, "?charset=utf8"}, "") //打开数据库,前者是驱动名,所以要导入: _ "github.com/go-sql-driver/mysql" DB, _ = sql.Open("mysql", path) //设置数据库最大连接数 DB.SetConnMaxLifetime(100) //设置上数据库最大闲置连接数 DB.SetMaxIdleConns(10) //验证连接 if err := DB.Ping(); err != nil{ fmt.Println("opon database fail",err) return false } fmt.Println("connnect success") return true } type User struct { Id int UserName string Password string } func InsertUser(user User) (bool){ //开启事务 tx, err := DB.Begin() if err != nil{ fmt.Println("tx fail") return false } //准备sql语句 stmt, err := tx.Prepare("INSERT INTO nk_user (`name`, `password`) VALUES (?, ?)") if err != nil{ fmt.Println("Prepare fail") return false } //将参数传递到sql语句中并且执行 res, err := stmt.Exec(user.UserName, user.Password) if err != nil{ fmt.Println("Exec fail") return false } //将事务提交 tx.Commit() //获得上一个插入自增的id fmt.Println(res.LastInsertId()) return true } func SelectAllUser() ([]User) { //执行查询语句 rows, err := DB.Query("SELECT * from nk_user") if err != nil{ fmt.Println("查询出错了") } var users []User //循环读取结果 for rows.Next(){ var user User //将每一行的结果都赋值到一个user对象中 err := rows.Scan(&user.Id, &user.UserName, &user.Password) if err != nil { fmt.Println("rows fail") } //将user追加到users的这个数组中 users = append(users, user) } return users }