因为做完了DRF+VUE的一些项目,然后Django的后台并发速度肯定是没有golang快,然后用了一天时间看完了整个的golang的基础语法。现在准备开始项目搭建的第一步。因为项目搭建好了就可以很快的上手写接口~
go开发也是restful模型,所以后期写接口开发起来会很快。
这次主要是记录自己搭建初始化项目时候的一些小技巧。
首先go项目大家都会创建,直接new新的project
指向的位置分别是你安装项目的目录和你是用的go的版本
项目创建好之后呢我们依次在我们的项目目录下创建一些常用的文件夹,方便写后期的项目接口。
api文件夹主要用来写后期的接口因为是restful开发
config文件夹里面包含ini文件 初始化我们的server和数据库的配置
middleware 中间件 后期需要
model 模型文件夹
routers 我们的配置路由
utils 一些配置项工具文件都放在这里
go.mod就是我们go项目下所有的引入的包
main.go 是我们的主函数文件
首先我们要安装一个 ini的包 这个包可以帮助我们快速的进行项目的初始化配置
go get gopkg.in/ini.v1
然后创建ini为后缀的文件未见内写入
[server]
AppMode = debug #调试模式 release生产模式
HttpPort = :3000 #开3000端口,你想要开服务的端口可以自己修改
[datavase]
Db = mysql #你所用的数据库
DbHost = #数据库的主机
DbPort = 3306 #端口
DbUser =
DbPassWord =
DbName = #数据库名称
配置好ini文件后我们在我们utils文件夹下创建我们的setting配置文件
配置文件内写入,每一个MustString的后面的数据是当我们无法拿到ini里面的数据的时候我们设置的默认值
var (
AppMode string
HttpPort string
Db string
DbHost string
DbPort string
DbUser string
DbPassWord string
DbName string
)
// 初始化setting文件
func init() {
file, err := ini.Load("config/config.ini") #你的ini文件所在的位置
if err != nil {
fmt.Println("配置文件错误无法读取", err)
}
LoadServer(file)
LoadData(file)
}
// 默认配置server服务 must是默认值
func LoadServer(file *ini.File) {
AppMode = file.Section("server").Key("AppMode").MustString("debug")
HttpPort = file.Section("server").Key("HttpPort").MustString(":3000")
}
// 默认配置数据库
func LoadData(file *ini.File) {
Db = file.Section("database").Key("Db").MustString("mysql")
DbHost = file.Section("database").Key("DbHost").MustString("默认数据")
DbPort = file.Section("database").Key("DbPort").MustString("3306")
DbUser = file.Section("database").Key("DbUser").MustString("默认数据")
DbPassWord = file.Section("database").Key("DbPassWord").MustString("默认数据")
DbName = file.Section("database").Key("DbName").MustString("默认数据")
}
我们写模型之前需要在我们的model文件夹下面做数据库的初始化,因为我们使用数据库要先打开数据库然后关闭数据库 否则会浪费资源。所以我们新建一个db.go的文件里面写入
var db *gorm.DB
var err error
// 初始化数据库
func InitDb() {
db, err = gorm.Open(utils.Db, fmt.Sprintf("%s:%s@(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local", utils.DbUser, utils.DbPassWord, utils.DbHost, utils.DbPort, utils.DbName))
if err != nil {
fmt.Printf("连接数据库失败,检查参数", err)
}
db.SingularTable(true) //默认表名为单数 为FALSE是负数
db.AutoMigrate(&User{}, &Activity{}) //自动迁移数据库文件
// SetMaxIdleConns 用于设置连接池中空闲连接的最大数量。
db.DB().SetMaxIdleConns(10)
// SetMaxOpenConns 设置打开数据库连接的最大数量。
db.DB().SetMaxOpenConns(100)
// SetConnMaxLifetime 设置了连接可复用的最大时间。
db.DB().SetConnMaxLifetime(10 * time.Second)
}
这里我是用的gorm,gorm现在分v1和v2版本,我现在使用的是v1版本,如果你是v2版本可以到中文文档看一下open的配置有点不太一样。go内置的gorm是很方便的,因为我是django过来的所以用orm可能会很顺手(狗头~)
这样我们数据库配置完后开始我们的路由配置!
router创建路由文件写入
import (
"awesomeProject/utils"
"github.com/gin-gonic/gin"
"net/http"
)
func InitRouter() {
gin.SetMode(utils.AppMode) //设置调解模式
r := gin.Default() //设置默认路由
router := r.Group("api/version1") //设置路由组
{
router.GET("hello", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"msg": "GETok",
})
})
#正常以后开发后面就是跟我们文件里面的函数了 我这样是为了测试
}
r.Run(utils.HttpPort) // 开放setting设置的端口 3000
}
最后的最后就是我们主函数文件main了
import (
"awesomeProject/model"
"awesomeProject/routes"
)
func main() {
//引用数据库
model.InitDb()
//引用路由
routes.InitRouter()
}
这样我们的go项目的基础配置就基本上搭建完了~