目錄結構:html
準備工做:python
建立一下數據庫,新增一個表,插入兩行數據mysql
CREATE DATABASE libary; CREATE TABLE `book` ( `id` int(50) NOT NULL AUTO_INCREMENT, `title` varchar(50) DEFAULT NULL, `price` int(50) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; MariaDB [(none)]> USE libary MariaDB [libary]> insert into book(id,title,price) VALUES(1,'C',50); MariaDB [libary]> insert into book(id,title,price) VALUES(2,'go',100); MariaDB [libary]> insert into book(id,title,price) VALUES(3,'python',150);
model.gogit
package model type Book struct { ID int64 `db:"id"` Title string `db:"title"` Price int64 `db:"price"` }
db.gogithub
package db import ( "fmt" "github.com/jmoiron/sqlx" _ "github.com/go-sql-driver/mysql" //init() "book/model" ) //go鏈接mysql示例 var db *sqlx.DB //是一個鏈接池對象 func InitDB()(err error){ //數據庫信息 dsn := "book:book@tcp(10.0.0.90:3306)/libary" //鏈接數據庫 db,err = sqlx.Connect("mysql",dsn) //不會檢驗用戶名和密碼是否正確 if err != nil{ return err } err = db.Ping() //嘗試鏈接數據庫 if err != nil { return } db.SetMaxOpenConns(10) //設置數據庫鏈接池最大鏈接數 db.SetMaxIdleConns(5) //設置最大空閒鏈接數 return } // 查詢全部記錄 func QueryAllBook()(booklist []*model.Book,err error){ //1.寫查詢單條記錄的sql語句 sqlStr :=`select id,title,price from book;` err =db.Select(&booklist,sqlStr) if err !=nil{ fmt.Println("查詢失敗") return } return } func AddBook(title string,price string)(booklist []*model.Book,err error){ //1.寫查詢單條記錄的sql語句 sqlStr :=`insert into book (title,price)VALUE (?,?);` _,err = db.Exec(sqlStr, title, price) if err !=nil{ fmt.Println("插入失敗") return } return } ///book/delete func DelBook(id string)(booklist []*model.Book,err error){ //1.寫查詢單條記錄的sql語句 sqlStr :=`delete from book where id=?;` _,err = db.Exec(sqlStr,id) if err !=nil{ fmt.Println("刪除失敗") return } return }
main.gosql
package main import ( "book/db" "fmt" _ "github.com/go-sql-driver/mysql" //init() "github.com/gin-gonic/gin" "net/http" ) func main(){ err := db.InitDB() if err !=nil{ fmt.Printf("init DB failed,err:%v\n",err) } fmt.Println("鏈接數據庫成功!") r := gin.Default() r.LoadHTMLGlob("../templates/*") r.GET("/book_list", func(c *gin.Context) { dataAll,err := db.QueryAllBook() if err !=nil{ fmt.Printf("get data failed:err",err) } c.HTML(http.StatusOK,"book_list.html",gin.H{"data":dataAll}) }) //添加新書 r.GET("/book/new", func(c *gin.Context) { c.HTML(200,"new_book.html",nil) }) r.POST("/book/new", func(c *gin.Context) { tile := c.PostForm("title") price := c.PostForm("price") db.AddBook(tile,price) //c.String(http.StatusOK,"add book successful!") c.Redirect(http.StatusMovedPermanently,"/book_list") }) //刪除書箱 r.GET("/book/delete", func(c *gin.Context) { id := c.Query("id") db.DelBook(id) c.String(http.StatusOK,"delete book successful!") }) r.Run(":8999") }