go 统一使用了 {{
和 }}
作为左右标签,没有其他的标签符号。
{{"string"}} // 一般 string
{{`raw string`}} // 原始 string
{{'c'}} // byte
{{print nil}} // nil 也被支持
函数
if ....else....end 流程判断
range 循环数据
控制器中
func (c *MainController) Get() {
c.Data["Website"] = "beego.me"
c.Data["Email"] = "astaxie@gmail.com"
c.Data["IsEmail"] = 1
pages:=[]struct{
Num int
}{{10},{20},{30}}
c.Data["pages"] =pages
c.TplName = "index.tpl"
}
模板中, 这里使用了Website 以及pages , 正常在模板中使用Website写法是{{ .Website }}, 但是在循环中需要加上$符号
{{range $index,$value := .pages}}
{{$index}} - {{$value}} of {{$.Website}}
{{end}}
eq/ne/lt/le/gt/ge 等于/不等于/小于/小于等于/大于/大于等于
template 引入模板 , 相当于tp中的{include file = " "} , 如果引用模板中存在当前页传入变量时, 需要加上 . , 如下段代码
{{template "footer.tpl" .}}
设置自定义静态目录
在main.go中的main方法 , 写入
beego.SetStaticPath("/download","download")
更多详情请参考 beego模板语法 go语言模版语法_蚂蚁爱吃糖-CSDN博客
ORM操作数据库 配置首先安装 , 运行命令 go get github.com/astaxie/beego/orm
1. 在conf / app.conf 中写入数据库连接配置
appname = demo
httpport = 8080
runmode = dev
[dev]
defaultdb=root:root@(127.0.0.1:3306)/fyouku?
charset=utf8
[prod]
defaultdb=root:root@(127.0.0.1:3306)/fyouku?
charset=utf8
2. 在main.go 中导入orm mysql驱动 , 并设置默认数据库,数据库别名必须是default ,否则编译会报错
package main
import (
_ "demo/routers"
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
_"github.com/go-sql-driver/mysql"
)
func main() {
defaultdb := beego.AppConfig.String("defaultdb") # 获取配置信息
orm.RegisterDriver("mysql",orm.DRMySQL) # 设置数据库类型为mysql
orm.RegisterDataBase("default" ,"mysql" ,defaultdb) # 设置默认数据库, 别名为default
beego.Run()
}
如果bee run 出现missing go.sum entry for module providing package github.com/go-sql-driver/mysql (imported by demo); to add:
需要执行go mod tidy
CURD获取参数 , 如TP: input() , beego用下面的方法获取参数
title = this.GetString("title","") // get
name = this.Input().Get("name") // get
select 查询单条
models
package models
import (
"github.com/astaxie/beego/orm"
)
type User struct { // 定义struct结构体 , 相当于php的class , 和数据库结构一致
Id int
Name string
AddTime int64
Status int
Mobile string
Avatar string
}
func init() {
orm.RegisterModel(new(User))
}
// 获取用户信息 参数id :int类型 , 返回值 User对象和error
func UserInfo(id int) (User,error) {
var(
err error // 定义一个错误
)
o := orm.NewOrm() // 实例化orm
User := User{Id :id} // 查询数据库 ,
err = o.Read(&User) // 读取异常
return User,err // 返回数据
}
controller
package controllers
import (
"github.com/astaxie/beego"
"demo/models" // 引入models
)
type DemoController struct {
beego.Controller
}
// 通過id获取用户名
// @router /user/username [get]
func (this *DemoController) GetUsername() {
var(
id int
err error
title string
user models.User
)
// 接收浏览器参数
id ,err = this.GetInt("id")
// 使用模型
user, err = models.UserInfo(id)
if err == nil {
//title = "恭喜添加成功"
title = user.Name // 接收User结构体中的Name值
} else{
title = "服务器走丢了"
}
this.Ctx.WriteString(title)
}
select查询列表
controller
package controllers
import (
"github.com/astaxie/beego"
"demo/models" // 引入models
"strconv"
)
type DemoController struct {
beego.Controller
}
// 获取用户列表
// @router /user/list [get]
func (this *DemoController) List() {
var (
err error
title string
users []models.User // 切片类型 , 相当于php的数组
)
users,err = models.List()
if err == nil {
title = "查询id大于10并且id倒序成功"
// 循环展示切片(数组)
for _ , v := range users{
title += v.Name +","
}
}else{
title = "查询失败"
}
this.Ctx.WriteString(title)
}
models
package models
import (
"github.com/astaxie/beego/orm"
)
type User struct { // 定义struct结构体 , 相当于php的class
Id int
Name string
AddTime int64
Status int
Mobile string
Avatar string
}
func init() {
orm.RegisterModel(new(User))
}
// 获取用户列表
func List() ([]User , error) {
var (
err error
users []User
)
// 查询出 Db::name("user")->field("id , name")->where("id",">",10)->order("id desc")->select();
o := orm.NewOrm()
qs := o.QueryTable("user") //声明调用哪张表
qs = qs.Filter("id__gt",10) // 输出id大于10的用户 ,注意 双下划线
qs = qs.Limit(2)
qs = qs.OrderBy("-id") // 这里是排序 , - 代表是倒序
qs.All(&users,"Id","Name") // all执行查询 , 后面的是查询的字段,相当于tp中的field
return users, err
}
insert
controller
package controllers
import (
"github.com/astaxie/beego"
"demo/models" // 引入models
"strconv"
)
type DemoController struct {
beego.Controller
}
// 实现用户注册 ( 插入数据库 )
// @router /user/save [get]
func (this *DemoController) Save() {
var (
name string
mobile string
avatar string
uid int64
err error
title string
)
// 接收参数
name = this.GetString("name")
mobile = this.GetString("mobile")
avatar = this.GetString("avatar")
// 操作orm
uid , err = models.Save(name,mobile,avatar)
if err == nil {
ids := strconv.FormatInt(uid,10)
title = "恭喜添加成功"+ids
}else{
title = "添加失败"
}
this.Ctx.WriteString(title)
}
models
package models
import (
"github.com/astaxie/beego/orm"
)
type User struct { // 定义struct结构体 , 相当于php的class
Id int
Name string
AddTime int64
Status int
Mobile string
Avatar string
}
func init() {
orm.RegisterModel(new(User))
}
// 插入数据
func Save(name string, mobile string, avatar string) (int64 ,error) {
var (
err error
user User
id int64
)
o := orm.NewOrm()
// 数据赋值
user.Name = name
user.Mobile = mobile
user.Avatar = avatar
user.Status = 0
id, err = o.Insert(&user) // 插入数据, 传入指针变量
return id,err
}
update
controller
package controllers
import (
"github.com/astaxie/beego"
"demo/models" // 引入models
"strconv"
)
type DemoController struct {
beego.Controller
}
// 更新用户名
// @router /user/update [get]
func (this *DemoController) Update() {
var (
id int
name string
err error
title string
)
id ,err = this.GetInt("id")
name = this.GetString("name")
err = models.Update(id , name)
if err == nil {
title = "恭喜更新成功"
}else{
title = "更新失败"
}
this.Ctx.WriteString(title)
}
models
package models
import (
"github.com/astaxie/beego/orm"
)
type User struct { // 定义struct结构体 , 相当于php的class
Id int
Name string
AddTime int64
Status int
Mobile string
Avatar string
}
func init() {
orm.RegisterModel(new(User))
}
// 更新数据
func Update(id int , name string) (error) {
var(
user User
err error
)
// 操作数据库
o := orm.NewOrm()
// 读取数据 , 没有就返回
user = User{Id: id}
if o.Read(&user) == nil {
// 更新数据
user.Name = name
_ , err = o.Update(&user)
}
return err
}
delete
controller
package controllers
import (
"github.com/astaxie/beego"
"demo/models" // 引入models
"strconv"
)
type DemoController struct {
beego.Controller
}
// 删除数据
// @router /user/del [get]
func (this *DemoController) Del() {
var (
id int
err error
title string
)
id ,err = this.GetInt("id")
err = models.Del(id)
if err == nil {
title = "恭喜删除成功"
}else{
title = "删除失败"
}
this.Ctx.WriteString(title)
}
models
package models
import (
"github.com/astaxie/beego/orm"
)
type User struct { // 定义struct结构体 , 相当于php的class
Id int
Name string
AddTime int64
Status int
Mobile string
Avatar string
}
func init() {
orm.RegisterModel(new(User))
}
// 删除数据
func Del(id int) error {
var (
user User
err error
)
o := orm.NewOrm()
user = User{Id: id}
// 删除
_,err = o.Delete(&user)
return err
}
执行原生SQL
controller
package controllers
import (
"demo/models" // 引入models
"github.com/astaxie/beego"
"strconv"
)
type DemoController struct {
beego.Controller
}
// 执行原生sql获取用户信息
// @router /sql/user/userinfo [get]
func (this *DemoController) SqlUserInfo() {
var(
id int
err error
title string
user models.User
)
id, _ = this.GetInt("id")
user,err = models.SqlUserInfo(id)
if err == nil {
//title = "恭喜添加成功"
title = "用户名:"+user.Name+", 手机号:"+user.Mobile // 接收User结构体中的Name值
} else{
title = "服务器走丢了!"
}
this.Ctx.WriteString(title)
}
models
package models
import (
"github.com/astaxie/beego/orm"
)
type User struct { // 定义struct结构体 , 相当于php的class
Id int
Name string
AddTime int64
Status int
Mobile string
Avatar string
}
func init() {
orm.RegisterModel(new(User))
}
// 原生查询用户信息
func SqlUserInfo(id int) (User ,error) {
var (
user User
err error
)
o := orm.NewOrm()
// 执行查询单条用QueryRow , 多条用QueryRows
// 执行insert update delete 使用exec提交
err = o.Raw("select `name`,`mobile` from user where id=? limit 1",id).QueryRow(&user)
return user ,err
}
Model
首先创建在model文件夹下
package models
import (
"github.com/astaxie/beego/orm" // 引用orm
)
type User struct { // 声明USER 结构体 ,里面的值对应数据库结构
Id int
Name string
AddTime int64
Status int
Mobile string
Avatar string
}
func init() {
orm.RegisterModel(new(User)) // 初始化方法注册User 模型
}
Demo全代码
controller
package controllers
import (
"demo/models" // 引入models
"github.com/astaxie/beego"
"strconv"
)
type DemoController struct {
beego.Controller
}
// 通過id获取用户名
// @router /user/username [get]
func (this *DemoController) GetUsername() {
var(
id int
err error
title string
user models.User
)
// 接收浏览器参数
id ,err = this.GetInt("id")
// 使用模型
user, err = models.UserInfo(id)
if err == nil {
//title = "恭喜添加成功"
title = user.Name // 接收User结构体中的Name值
} else{
title = "服务器走丢了"
}
this.Ctx.WriteString(title)
}
// 实现用户注册 ( 插入数据库 )
// @router /user/save [get]
func (this *DemoController) Save() {
var (
name string
mobile string
avatar string
uid int64
err error
title string
)
// 接收参数
name = this.GetString("name")
mobile = this.GetString("mobile")
avatar = this.GetString("avatar")
// 操作orm
uid , err = models.Save(name,mobile,avatar)
if err == nil {
ids := strconv.FormatInt(uid,10)
title = "恭喜添加成功"+ids
}else{
title = "添加失败"
}
this.Ctx.WriteString(title)
}
// 更新用户名
// @router /user/update [get]
func (this *DemoController) Update() {
var (
id int
name string
err error
title string
)
id ,err = this.GetInt("id")
name = this.GetString("name")
err = models.Update(id , name)
if err == nil {
title = "恭喜更新成功"
}else{
title = "更新失败"
}
this.Ctx.WriteString(title)
}
// 删除数据
// @router /user/del [get]
func (this *DemoController) Del() {
var (
id int
err error
title string
)
id ,err = this.GetInt("id")
err = models.Del(id)
if err == nil {
title = "恭喜删除成功"
}else{
title = "删除失败"
}
this.Ctx.WriteString(title)
}
// 获取用户列表
// @router /user/list [get]
func (this *DemoController) List() {
var (
err error
title string
users []models.User // 切片类型 , 相当于php的数组
)
users,err = models.List()
if err == nil {
title = "查询id大于10并且id倒序成功"
// 循环展示切片(数组)
for _ , v := range users{
title += v.Name +","
}
}else{
title = "查询失败"
}
this.Ctx.WriteString(title)
}
// 执行原生sql获取用户信息
// @router /sql/user/userinfo [get]
func (this *DemoController) SqlUserInfo() {
var(
id int
err error
title string
user models.User
)
id, _ = this.GetInt("id")
user,err = models.SqlUserInfo(id)
if err == nil {
//title = "恭喜添加成功"
title = "用户名:"+user.Name+", 手机号:"+user.Mobile // 接收User结构体中的Name值
} else{
title = "服务器走丢了!"
}
this.Ctx.WriteString(title)
}
// 原生sql插入数据
// @router /sql/user/save [get]
func (this *DemoController) SqlSave() {
var(
err error
title string
name string
mobile string
avatar string
)
name = this.GetString("name")
mobile = this.GetString("mobile")
avatar = this.GetString("avatar")
err = models.SqlSave(name , mobile,avatar)
if err == nil {
title = "恭喜添加成功"
}else{
title = "添加失败"
}
this.Ctx.WriteString(title)
}
// 原生sql更新数据
// @router /sql/user/update [get]
func (this *DemoController) SqlUpdate() {
var (
id int
title string
name string
mobile string
err error
)
id,err = this.GetInt("id")
name = this.GetString("name")
mobile = this.GetString("mobile")
err = models.SqlUpdate(id, name,mobile)
if err == nil {
title = "恭喜更新成功"
}else{
title = "更新失败"
}
this.Ctx.WriteString(title)
}
// 原生sql删除数据
// @router /sql/user/del [get]
func (this *DemoController) SqlDel() {
var (
id int
err error
title string
)
id,_ = this.GetInt("id")
err = models.SqlDel(id)
if err == nil {
title = "恭喜删除成功"
}else{
title = "删除失败"
}
this.Ctx.WriteString(title)
}
// 原生获取用户列表
// @router /sql/user/list [get]
func (this *DemoController) SqlList() {
var (
title string
err error
users []models.User
)
_ , users, err = models.SqlList()
if err == nil {
for _,v := range users{
title += "用户名"+v.Name+"\n"
}
}else{
title = "服务器走丢了"
}
this.Ctx.WriteString(title)
}
model
package models
import (
"github.com/astaxie/beego/orm"
)
type User struct { // 定义struct结构体 , 相当于php的class
Id int
Name string
AddTime int64
Status int
Mobile string
Avatar string
}
func init() {
orm.RegisterModel(new(User))
}
// 获取用户信息 参数id :int类型 , 返回值 User对象和error
func UserInfo(id int) (User, error) {
var (
err error // 定义一个错误
)
o := orm.NewOrm() // 实例化orm
User := User{Id: id} // 查询数据库 ,
err = o.Read(&User) // 读取异常
return User, err // 返回数据
}
// 插入数据
func Save(name string, mobile string, avatar string) (int64 ,error) {
var (
err error
user User
id int64
)
o := orm.NewOrm()
// 数据赋值
user.Name = name
user.Mobile = mobile
user.Avatar = avatar
user.Status = 0
id, err = o.Insert(&user) // 插入数据, 传入指针变量
return id,err
}
// 更新数据
func Update(id int , name string) (error) {
var(
user User
err error
)
// 操作数据库
o := orm.NewOrm()
// 读取数据 , 没有就返回
user = User{Id: id}
if o.Read(&user) == nil {
// 更新数据
user.Name = name
_ , err = o.Update(&user)
}
return err
}
// 删除数据
func Del(id int) error {
var (
user User
err error
)
o := orm.NewOrm()
user = User{Id: id}
// 删除
_,err = o.Delete(&user)
return err
}
// 获取用户列表
func List() ([]User , error) {
var (
err error
users []User
)
// 查询出 Db::name("user")->field("id , name")->where("id",">",10)->order("id desc")->select();
o := orm.NewOrm()
qs := o.QueryTable("user") //声明调用哪张表
qs = qs.Filter("id__gt",10) // 输出id大于10的用户 ,注意 双下划线
qs = qs.Limit(2)
qs = qs.OrderBy("-id") // 这里是排序 , - 代表是倒序
qs.All(&users,"Id","Name") // all执行查询 , 后面的是查询的字段,相当于tp中的field
return users, err
}
// 原生查询用户信息
func SqlUserInfo(id int) (User ,error) {
var (
user User
err error
)
o := orm.NewOrm()
// 执行查询单条用QueryRow , 多条用QueryRows
err = o.Raw("select `name`,`mobile` from user where id=? limit 1",id).QueryRow(&user)
return user ,err
}
// 原生插入
func SqlSave(name string,mobile string , avatar string) error {
var(
err error
)
o := orm.NewOrm()
// 执行insert update delete 使用exec提交
_,err = o.Raw("insert into user (`name`,`mobile`,`avatar`,`status`) values (?,?,?,?)",name,mobile,avatar,0).Exec()
return err
}
// 原生更新
func SqlUpdate(id int,name string,mobile string) error {
var(
err error
)
o:=orm.NewOrm()
_,err = o.Raw("update user set `name`=?,`mobile`=? where id=?", name,mobile,id).Exec()
return err
}
// 原生删除
func SqlDel(id int) error {
var (
err error
)
o := orm.NewOrm()
_,err= o.Raw("delete from user where `id`=?",id).Exec()
return err
}
// 原生查询列表
func SqlList() (int64,[]User,error) {
var (
users []User
)
o:=orm.NewOrm()
num ,err := o.Raw("select id,name from user where id>? order by id desc limit 2",10).QueryRows(&users)
return num , users ,err
}