1.安装
go get github.com/astaxie/beego/orm
2.操作数据库模块编写
main.go引入models模块
import (
_ "test/models"
_ "test/routers"
"github.com/beego/beego/logs"
beego "github.com/beego/beego/v2/server/web"
"github.com/beego/beego/v2/server/web/filter/cors"
)
func main() {
logs.SetLogger("console")
beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
// 允许访问所有源
AllowAllOrigins: true,
// 可选参数"GET", "POST", "PUT", "DELETE", "OPTIONS" (*为所有)
AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
// 指的是允许的Header的种类
AllowHeaders: []string{"Origin", "Authorization", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Content-Type"},
// 公开的HTTP标头列表
ExposeHeaders: []string{"Content-Length", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Content-Type"},
// 如果设置,则允许共享身份验证凭据,例如cookie
AllowCredentials: true,
}))
// beego.SetStaticPath("/static","public")
beego.SetStaticPath("/static", "static")
beego.Run()
}
menu.go操作菜单的实体类
package models
import (
"time"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
)
type Menu struct {
Id int `json:"id"`
Path string `json:"path"`
Discrption string `json:"discrption"`
Name string `json:"name"`
Icon string `json:"icon"`
Pid int `json:"pid"`
}
type MenuList struct {
Id int `json:"id"`
Path string `json:"path"`
Discrption string `json:"discrption"`
Name string `json:"name"`
Icon string `json:"icon"`
Pid int `json:"pid"`
Children []*MenuList `json:"children"`
}
func init() {
orm.RegisterDataBase("default", "mysql", "root:123456@tcp(127.0.0.1:3306)/wwltest?charset=utf8")
orm.RegisterDriver("postgres", orm.DRPostgres)
orm.RegisterModel(new(Menu))
orm.RunSyncdb("default", false, true)
orm.DefaultTimeLoc = time.UTC
}
func GetMenuTree() (dataList []interface{}, err error) {
var parentList []*Menu
o := orm.NewOrm()
if _, err := o.QueryTable(new(Menu)).Filter("pid", nil).All(&parentList); err != nil {
return nil, err
}
for _, v := range parentList {
parent := MenuList{v.Id, v.Path, v.Discrption, v.Name, v.Icon, v.Pid, []*MenuList{}}
var childrenList []*Menu
if _, err := o.QueryTable(new(Menu)).Filter("pid", v.Id).All(&childrenList); err != nil {
return nil, err
}
for _, c := range childrenList {
child := MenuList{c.Id, c.Path, c.Discrption, c.Name, c.Icon, c.Pid, []*MenuList{}}
parent.Children = append(parent.Children, &child)
}
dataList = append(dataList, parent)
}
return dataList, nil
}