入门小实例
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/hello",func(c *gin.Context) {
c.JSON(200,gin.H{"message":"helloworld",})
})
r.Run(":8082")
}
电脑上安装mysql数据库和navcateMySQL 安装 | 菜鸟教程www.runoob.com支持 MySQL、MariaDB、MongoDB、SQL Server、SQLite、Oracle 和 PostgreSQL 的数据库管理www.navicat.com.cn
创建一个数据库和张表
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(40) NOT NULL DEFAULT '',
`age` int(22) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
安装操作mysql驱动
go get -u github.com/go-sql-driver/mysql
初始化连接池
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
// 定义一个全局对象db
var db *sql.DB
// 定义一个初始化数据库的函数
func initDB() (err error) {
// DSN:Data Source Name
dsn := "user:password@tcp(127.0.0.1:3306)/test"
// 不会校验账号密码是否正确
// 注意!!!这里不要使用:=,我们是给全局变量赋值,然后在main函数中使用全局变量db
db, err = sql.Open("mysql", dsn)
if err != nil {
return err
}
// 尝试与数据库建立连接(校验dsn是否正确)
err = db.Ping()
if err != nil {
return err
}
return nil
}
使用sql.Open方法会创建一个数据库连接池db。这个db不是数据库连接,它是一个连接池,只有当真正数据库通信的时候才创建连接。例如这里的db.Ping的操作。db.SetMaxIdleConns(20)和db.SetMaxOpenConns(20)分别设置数据库的空闲连接和最大打开连接,即向Mysql服务端发出的所有连接的最大数目。
增
package main
import (
"database/sql"
"fmt"
"github.com/gin-gonic/gin"
_ "github.com/go-sql-driver/mysql"
)
var db *sql.DB
// 定义一个初始化数据库的函数
func initDB() (err error) {
// DSN:Data Source Name
dsn := "root:1993XTAY701@tcp(127.0.0.1:3306)/test"
// 不会校验账号密码是否正确
// 注意!!!这里不要使用:=,我们是给全局变量赋值,然后在main函数中使用全局变量db
db, err = sql.Open("mysql", dsn)
if err != nil {
return err
}
// 尝试与数据库建立连接(校验dsn是否正确)
err = db.Ping()
if err != nil {
return err
}
return nil
}
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
func main( ) {
err := initDB()
if err != nil {
fmt.Println("连接数据库失败",err)
return
}
r := gin.Default()
r.POST("/user",func(c *gin.Context) {
var user User
c.BindJSON(&user)
rs, err := db.Exec("INSERT INTO users(name, age) VALUES (?, ?)", user.Name, user.Age)
if err != nil {
fmt.Println("插入数所库失败",err)
return
}
id, err := rs.LastInsertId()
msg := fmt.Sprintf("insert successful %d", id)
c.JSON(200,gin.H{"msg":msg})
})
r.Run(":8082")
}
查看数据库
删
package main
import (
"database/sql"
"fmt"
"github.com/gin-gonic/gin"
_ "github.com/go-sql-driver/mysql"
)
var db *sql.DB
// 定义一个初始化数据库的函数
func initDB() (err error) {
// DSN:Data Source Name
dsn := "root:1993XTAY701@tcp(127.0.0.1:3306)/test"
// 不会校验账号密码是否正确
// 注意!!!这里不要使用:=,我们是给全局变量赋值,然后在main函数中使用全局变量db
db, err = sql.Open("mysql", dsn)
if err != nil {
return err
}
// 尝试与数据库建立连接(校验dsn是否正确)
err = db.Ping()
if err != nil {
return err
}
return nil
}
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
//删
func main() {
err := initDB()
if err != nil {
fmt.Println("连接数据库失败",err)
return
}
r := gin.Default()
r.GET("/user",func(c *gin.Context) {
id := c.Query("id")
rs, err := db.Exec("DELETE FROM users WHERE id=?", id)
if err != nil {
fmt.Println("删除失败",err)
return
}
ra, err := rs.RowsAffected()
if err != nil {
fmt.Println(err)
return
}
msg := fmt.Sprintf("Delete users %d successful %d", id, ra)
c.JSON(200,gin.H{"msg":msg})
})
r.Run(":8082")
}
查看数据库
改
package main
import (
"database/sql"
"fmt"
"github.com/gin-gonic/gin"
_ "github.com/go-sql-driver/mysql"
)
var db *sql.DB
// 定义一个初始化数据库的函数
func initDB() (err error) {
// DSN:Data Source Name
dsn := "root:1993XTAY701@tcp(127.0.0.1:3306)/test"
// 不会校验账号密码是否正确
// 注意!!!这里不要使用:=,我们是给全局变量赋值,然后在main函数中使用全局变量db
db, err = sql.Open("mysql", dsn)
if err != nil {
return err
}
// 尝试与数据库建立连接(校验dsn是否正确)
err = db.Ping()
if err != nil {
return err
}
return nil
}
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
//改
func main() {
err := initDB()
if err != nil {
fmt.Println("数据库连接失败",err)
return
}
r := gin.Default()
r.POST("/user",func(c *gin.Context) {
var user User
c.BindJSON(&user)
stmt, err := db.Prepare("UPDATE users SET name=?, age=? WHERE id=?")
if err != nil {
fmt.Println("预处理失败",err)
return
}
defer stmt.Close()
rs, err := stmt.Exec(user.Name, user.Age, user.ID)
if err != nil {
fmt.Println("更新数据失败",err)
return
}
ra, err := rs.RowsAffected()
if err != nil {
fmt.Println("更新当前行失败",err)
return
}
msg := fmt.Sprintf("Update user %d successful %d", user.ID, ra)
c.JSON(200,gin.H{"msg":msg})
})
r.Run(":8082")
}
查看数据库
查单条记录
package main
import (
"database/sql"
"fmt"
"github.com/gin-gonic/gin"
_ "github.com/go-sql-driver/mysql"
)
var db *sql.DB
// 定义一个初始化数据库的函数
func initDB() (err error) {
// DSN:Data Source Name
dsn := "root:1993XTAY701@tcp(127.0.0.1:3306)/test"
// 不会校验账号密码是否正确
// 注意!!!这里不要使用:=,我们是给全局变量赋值,然后在main函数中使用全局变量db
db, err = sql.Open("mysql", dsn)
if err != nil {
return err
}
// 尝试与数据库建立连接(校验dsn是否正确)
err = db.Ping()
if err != nil {
return err
}
return nil
}
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
err := initDB()
if err != nil {
fmt.Println("连接数据库失败",err)
return
}
r := gin.Default()
r.GET("/user/:id",func(c *gin.Context) {
var user User
id := c.Param("id")
err := db.QueryRow("SELECT id, name, age FROM users WHERE id=?", id).Scan(
&user.ID, &user.Name, &user.Age,
)
if err != nil {
fmt.Println("查询失败",err)
return
}
c.JSON(200,gin.H{"code":200,"msg":"SUCCESS","data":user})
})
r.Run(":8082")
}
查询多条
package main
import (
"database/sql"
"fmt"
"github.com/gin-gonic/gin"
_ "github.com/go-sql-driver/mysql"
)
var db *sql.DB
// 定义一个初始化数据库的函数
func initDB() (err error) {
// DSN:Data Source Name
dsn := "root:1993XTAY701@tcp(127.0.0.1:3306)/test"
// 不会校验账号密码是否正确
// 注意!!!这里不要使用:=,我们是给全局变量赋值,然后在main函数中使用全局变量db
db, err = sql.Open("mysql", dsn)
if err != nil {
return err
}
// 尝试与数据库建立连接(校验dsn是否正确)
err = db.Ping()
if err != nil {
return err
}
return nil
}
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
//查询多条
func main() {
err := initDB()
if err != nil {
fmt.Println("连接数据库失败",err)
return
}
r := gin.Default()
r.GET("/user",func(c *gin.Context) {
users := make([]User, 0)
rows, err := db.Query("SELECT id, name, age FROM users")
if err != nil {
fmt.Println("查询失败",err)
return
}
defer rows.Close()
for rows.Next() {
var user User
rows.Scan(&user.ID, &user.Name, &user.Age)
users = append(users,user)
}
c.JSON(200,gin.H{"code":200,"msg":"SUCCESS","data":users})
})
r.Run(":8082")
}
查看数据库