GINBLOG篇
Gin博客篇
--基础模板篇
首先创建4个基本的文件夹
**ginblog *config|__config.ini*model|__Article.go|__Category.go|__db.go|__User.go*routes|__router.go*utils|__setting.gomain.gogo.mod
前提:在开始之前先配置好mysql,创建名为ginblog的数据库。
config.ini(配置文件)
[server]# debug 开发模式, release 生产模式AppMode = debugHttpPort = :8080[database]Db = mysqlDbHost = 127.0.0.1DbPort = 3306DbUser = rootDbPassWord = 123456DbName = ginblog
setting.go
package utilsimport ( "fmt" "gopkg.in/ini.v1")var ( AppMode string HttpPort string Db string DbHost string DbPost string DbUser string DbPassword string DbName string)func init() { file, err := ini.Load("./config/config.ini") if err != nil { fmt.Println("配置文件读取错误,请检查文件路径:", err)} LoadServer(file) LoadData(file)}func LoadData(file *ini.File) { Db = file.Section("database").Key("Db").MustString("mysql") DbHost = file.Section("database").Key("DbHost").MustString("localhost") DbPost = file.Section("database").Key("DbPort").MustString("3306") DbUser = file.Section("database").Key("DbUser").MustString("root") DbPassword = file.Section("database").Key("DbPassWord").MustString("123456") DbName = file.Section("database").Key("DbName").MustString("ginblog")}func LoadServer(file *ini.File) { AppMode = file.Section("server").Key("AppMode").MustString("debug") HttpPort = file.Section("server").Key("HttpPort").MustString("8080")}
配置文件这里就配置好了,配置文件的作用就是为了方便修改变量,比如MySQL以及账号,密码,数据库名,再就是接口和本地地址。
Mysql数据库篇:
这里使用GORM来创建三个表,分别用作存储文章内容,文章类型,用户的账户和密码。
文章内容
type Article struct { Category Category `gorm:"foreignKey:Cid"` gorm.Model Title string `gorm:"type:varchar(100);not null" json:"title"` Cid int `gorm:"type:int;not null" json:"cid"` Desc int `gorm:"type:varchar(200)" json:"desc"` Content string `gorm:"type:longtext" json:"content"` Img string `gorm:"type:varchar(100)" json:"img"`}
文章类型
type Category struct { gorm.Model ID uint `gorm:"primary_key;auto_increment" json:"id"` Name string `gorm:"type:varchar(20);not null" json:"name"`}
用户信息
type User struct { gorm.Model Username string `gorm:"type:varchar(20);not null " json:"username"` Password string `gorm:"type:varchar(20);not null" json:"password"` Role int `gorm:"type:int" json:"role"`}
我们的目的是照着这三个结构体的内容在数据库中形成3张表。(使用GORM来创建)
然后使用数据库创建
package modelimport ( "fmt" "ginblog/utils" "gorm.io/driver/mysql" "gorm.io/gorm")var db *gorm.DBvar err errorfunc InitDb() { dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", utils.DbUser, utils.DbPassword, utils.DbHost, utils.DbPost, utils.DbName,) db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { fmt.Printf("连接数据库失败,请检查参数: ",err)} db.AutoMigrate(&User{},&Category{},&Article{}) //db.AutoMigrate(&User{},&Category{})}
在main方法中运行一次model.InitDb(),三张表就会在mysql生成,并且每张表后面都会有s。
再就是路由器
package routersimport ( "ginblog/utils"
"github.com/gin-gonic/gin"
"http/htp"
)func InitRouter() { gin.SetMode(utils.AppMode) r := gin.Default() router := r.Group("api/v1"){ router.GET("/hello",func(context *gin.Context){ c.JSON( http.StatusOK,gin.H{ "message": "hello" } ) })} r.Run()}
这就是一个基础的模板,功能的增删改查,路由的控制器写法,将在下次讲解。