浅浅尝试一下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

解决go build报错cannot find main module; see 'go help modules’查看一下