package main import ( "database/sql" "fmt" "strconv" "github.com/gin-gonic/gin" "net/http" _ "github.com/jinzhu/gorm/dialects/sqlite" _"github.com/go-sql-driver/mysql" "log" ) var db *sql.DB var err error //數據表爲user,字段分別有id,name,gender,age type User struct { ID int `json:"id"` Name string `json:"name"` Gender int `json:"gender"` Age int `json:"age"` } func main() { //初始化數據庫連接池,連接信息(數據庫類型mysql,數據庫用戶名root,數據庫密碼爲空,數據庫ip:127.0.0.1,端口3306,數據庫名imooc) db,err=sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/imooc?parseTime=true") if err != nil{ log.Fatalln(err) } //定義數據庫操作 defer db.Close() //設置數據庫空閒連接 db.SetMaxIdleConns(20) //設置數據庫最大打開連接 db.SetMaxOpenConns(20) if err := db.Ping(); err != nil{ log.Fatalln(err) } //設置路由 router := gin.Default() //添加 router.POST("/user", func(c *gin.Context) { //接值 Name:=c.Request.FormValue("name") Gender:=c.Request.FormValue("gender") Age:=c.Request.FormValue("age") //執行插入數據操作 rs,err:=db.Exec("insert into user (name,gender,age)values (?,?,?)",Name,Gender,Age) if err!=nil{ log.Fatalln(err) } id,err:=rs.LastInsertId() if err!=nil{ log.Fatalln(err) } msg:=fmt.Sprintf("insert successful %d",id) //最後返回json格式數據 c.JSON(http.StatusOK,gin.H{ "msg":msg, "code":200, }) }) //查詢列表 router.GET("/users", func(c *gin.Context) { name:=c.Request.FormValue("name") //執行查詢操作
rows,err:=db.Query("select * from user where name like CONCAT('%',?,'%')",name)if err!=nil{ log.Fatalln(err) } //定義rows.Close操作,將數據庫連接轉移到rows對象上 defer rows.Close() //使用make創建一個[]User切片,而不是直接使用var users []User的聲明方式.(因爲使用make當數組切片沒有元素時,json會返回[].而直接聲明方式的話,當沒有元素時,json會返回null) users:=make([]User,0) //使用rows對象Next()方法遍歷數據 for rows.Next(){ //定義一個user對象 var user User //一個個綁定到user對象上 rows.Scan(&user.ID,&user.Name,&user.Gender,&user.Age) //最後append追加到users切片 users=append(users,user) } if err=rows.Err();err!=nil{ log.Fatalln(err) } //返回json格式數據 c.JSON(http.StatusOK,gin.H{ "users":users, }) }) //查詢單條記錄 router.GET("/user", func(c *gin.Context) { //接值 id:=c.Request.FormValue("id") //定義user對象 var user User //執行查詢操作,並用Scan()方法將查詢結果綁定到user對象上 err:=db.QueryRow("select * from user where id=?",id).Scan(&user.ID,&user.Name,&user.Gender,&user.Age) if err!=nil{ log.Println(err) c.JSON(http.StatusOK,gin.H{ "user":nil, }) return } //返回json數據 c.JSON(http.StatusOK,gin.H{ "user":user, }) }) //修改單條記錄 router.PUT("/update", func(c *gin.Context) { //接值 cid:=c.Request.FormValue("id") id,_:=strconv.Atoi(cid)//將字符串類型轉換成int操作,int轉字符串: Itoa() name:=c.Request.FormValue("name") cgender:=c.Request.FormValue("gender") gender,_:=strconv.Atoi(cgender) cage:=c.Request.FormValue("age") age,_:=strconv.Atoi(cage) //創建user對象 user:=User{ID: id,Name:name,Gender:gender,Age:age} //執行修改操作 rs,err:=db.Exec("update user set name=?,gender=?,age=? where id=?",user.Name,user.Gender,user.Age,user.ID) if err!=nil{ log.Fatalln(err) } //獲取修改的結果(正常情況下ra返回1) ra,err:=rs.RowsAffected() if err!=nil{ log.Fatalln(err) } //返回的msg內容 msg:=fmt.Sprintf("update user %d successful %d",user.ID,ra) //返回json數據 c.JSON(http.StatusOK,gin.H{ "msg":msg, }) }) //刪除某條記錄 router.DELETE("delete", func(c *gin.Context) { //接值 cid:=c.Request.FormValue("id") //利用strconv函數的Atoi()方法將字符串類型cid轉換爲int整型 id,err:=strconv.Atoi(cid) if err!=nil{ log.Fatalln(err) } //執行刪除操作 rs,err:=db.Exec("delete from user where id=?",id) if err!=nil{ log.Fatalln(err) } ra,err:=rs.RowsAffected() if err!=nil{ log.Fatalln(err) } //返回提示信息msg msg:=fmt.Sprint("delete user %d successful %d",ra,id) //返回json數據 c.JSON(http.StatusOK,gin.H{ "msg":msg, }) }) //本地監聽8080端口運行該程序 router.Run("0.0.0.0:8080") }
gin中簡單的curd接口例子
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.