浅浅尝试一下Golang MVC,实现解耦合
1.Util包–>connect.go
用于连接数据库
package Util
import (
"fmt"
_ "github.com/jinzhu/gorm/dialects/mysql"//一定要导入这个呀!
"github.com/jmoiron/sqlx"
"time"
)
var db *sqlx.DB
func Connect() *sqlx.DB{
db, err := sqlx.Connect("mysql", "root:XXXXXX@(XXXXXXX:3306)/test?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
fmt.Println(err)
}
db.SetConnMaxLifetime(time.Second * 10)
db.SetMaxOpenConns(20) // 设置与数据库建立连接的最大数目
db.SetMaxIdleConns(10) // 设置连接池中的最大闲置连接数
return db
}
2.pojo包–>Text.go
结构体(实体类)
package pojo
type Text struct {
Question string `db:"question"`
Answer string `db:"answer"`
OptionA string `db:"optionA"`
OptionB string `db:"optionB"`
OptionC string `db:"optionC"`
OptionD string `db:"optionD"`
No string `db:"no"`
}
3.Dao包–>testDao.go
具体方法实现(用sqlx在数据库操作)
package Dao
import (
"awesomeProject/Util"
"awesomeProject/pojo"
"fmt"
)
var db=Util.Connect()
func Delete() {
sqlStr := "delete from danxuan where no = ?"
ret, err := db.Exec(sqlStr, 10087)
if err != nil {
fmt.Printf("delete failed, err:%v\n", err)
return
}
n, _ := ret.RowsAffected() // 操作影响的行数
fmt.Printf("删除成功, affected rows:%d\n", n)
}
func Update() {
sqlStr := "update danxuan set question=? where no = ?"
ret, err := db.Exec(sqlStr, "修改了呀", 10087)
if err != nil {
fmt.Printf("更新失败, err:%v\n", err)
return
}
n, _ := ret.RowsAffected() // 操作影响的行数
fmt.Printf("update success, affected rows:%d\n", n)
}
func Select() ([] pojo.Text) {
var text[] pojo.Text
sql:="select * from danxuan limit 5"
_ = db.Select(&text,sql)
return text
}
func Insert() {
sqlStr := "insert into danxuan values (?,?,?,?,?,?,?)"
_, err := db.Exec(sqlStr, 10087,"你好","A.123","B.456","C.789","D.123","C")
if err != nil {
fmt.Printf("插入失败, err:%v\n", err)
return
}
fmt.Printf("插入成功 %d.\n")
}
4.Controller–>testController.go
接口实现(Gin框架)
package Controller
import (
"awesomeProject/Dao"
"github.com/gin-gonic/gin"
)
func TextController() {
r:=gin.Default()
r.GET("/test", func(context *gin.Context) {
context.JSON(200,gin.H{
"message":Dao.Select(),
})
})
_ = r.Run(":8080")
}
5.启动go
package main
import (
"awesomeProject/Controller"
_ "awesomeProject/Controller"
)
func main() {
Controller.TextController()
}
成功啦!
6.注意事项
一定要保证项目目录下有go.mod文件,External Libraries下有Go Modules<文件名>
go mod init
go mod tidy