beego

beego

beego 路由跳转问题

有问必答heramerom 回复了问题 • 2 人关注 • 1 个回复 • 142 次浏览 • 1 天前 • 来自相关话题

go的beego框架在不使用orm的情况下怎么操作数据库?

技术讨论jsharkc 回复了问题 • 4 人关注 • 3 个回复 • 331 次浏览 • 2017-08-14 10:53 • 来自相关话题

Beego run http server Running on http://:8080

有问必答astaxie 回复了问题 • 2 人关注 • 1 个回复 • 309 次浏览 • 2017-07-26 12:53 • 来自相关话题

关于beego orm 的查询

有问必答romny 回复了问题 • 3 人关注 • 3 个回复 • 1296 次浏览 • 2017-07-14 21:08 • 来自相关话题

beego xsrf 问题

有问必答astaxie 回复了问题 • 2 人关注 • 1 个回复 • 555 次浏览 • 2017-06-24 11:55 • 来自相关话题

GoCN为什么没有使用beego来搭建呢?

GolangAlexaMa 回复了问题 • 6 人关注 • 7 个回复 • 1378 次浏览 • 2017-06-19 10:20 • 来自相关话题

脚手架bee 使用问题反馈

有问必答astaxie 回复了问题 • 2 人关注 • 2 个回复 • 407 次浏览 • 2017-06-04 12:39 • 来自相关话题

beego orm.insertMulti插入后,对象id没有像insert那样给对象加上

回复

有问必答luischan 发起了问题 • 1 人关注 • 0 个回复 • 680 次浏览 • 2017-04-12 12:09 • 来自相关话题

用beego写入log到elasticsearch失败

有问必答我很酷 回复了问题 • 3 人关注 • 7 个回复 • 1259 次浏览 • 2017-04-10 15:04 • 来自相关话题

beego中路由参数中的controller传入问题

有问必答sundyli 回复了问题 • 2 人关注 • 1 个回复 • 847 次浏览 • 2017-03-24 23:48 • 来自相关话题

beego1.8版本功能征集

文章分享lkhjlbh 回复了问题 • 22 人关注 • 26 个回复 • 3507 次浏览 • 2017-03-22 17:58 • 来自相关话题

beego filter

有问必答qqqqq 回复了问题 • 3 人关注 • 3 个回复 • 719 次浏览 • 2017-03-09 10:17 • 来自相关话题

beego orm 支持存储过程的调用么?

回复

有问必答andy 发起了问题 • 1 人关注 • 0 个回复 • 676 次浏览 • 2017-03-05 20:15 • 来自相关话题

beego问题

有问必答astaxie 回复了问题 • 3 人关注 • 3 个回复 • 849 次浏览 • 2017-01-16 23:32 • 来自相关话题

beego有防止页面重复提交的功能吗

有问必答pathbox 回复了问题 • 4 人关注 • 5 个回复 • 1137 次浏览 • 2017-01-04 22:01 • 来自相关话题

条新动态, 点击查看
zdreamx

zdreamx 回答了问题 • 2016-11-08 11:27 • 26 个回复 不感兴趣

beego1.8版本功能征集

赞同来自:

orm有没有考虑分表分区分库的优化或支持
orm有没有考虑分表分区分库的优化或支持

beego 路由跳转问题

回复

有问必答heramerom 回复了问题 • 2 人关注 • 1 个回复 • 142 次浏览 • 1 天前 • 来自相关话题

go的beego框架在不使用orm的情况下怎么操作数据库?

回复

技术讨论jsharkc 回复了问题 • 4 人关注 • 3 个回复 • 331 次浏览 • 2017-08-14 10:53 • 来自相关话题

Beego run http server Running on http://:8080

回复

有问必答astaxie 回复了问题 • 2 人关注 • 1 个回复 • 309 次浏览 • 2017-07-26 12:53 • 来自相关话题

关于beego orm 的查询

回复

有问必答romny 回复了问题 • 3 人关注 • 3 个回复 • 1296 次浏览 • 2017-07-14 21:08 • 来自相关话题

beego xsrf 问题

回复

有问必答astaxie 回复了问题 • 2 人关注 • 1 个回复 • 555 次浏览 • 2017-06-24 11:55 • 来自相关话题

GoCN为什么没有使用beego来搭建呢?

回复

GolangAlexaMa 回复了问题 • 6 人关注 • 7 个回复 • 1378 次浏览 • 2017-06-19 10:20 • 来自相关话题

脚手架bee 使用问题反馈

回复

有问必答astaxie 回复了问题 • 2 人关注 • 2 个回复 • 407 次浏览 • 2017-06-04 12:39 • 来自相关话题

beego orm.insertMulti插入后,对象id没有像insert那样给对象加上

回复

有问必答luischan 发起了问题 • 1 人关注 • 0 个回复 • 680 次浏览 • 2017-04-12 12:09 • 来自相关话题

用beego写入log到elasticsearch失败

回复

有问必答我很酷 回复了问题 • 3 人关注 • 7 个回复 • 1259 次浏览 • 2017-04-10 15:04 • 来自相关话题

beego中路由参数中的controller传入问题

回复

有问必答sundyli 回复了问题 • 2 人关注 • 1 个回复 • 847 次浏览 • 2017-03-24 23:48 • 来自相关话题

beego1.8版本功能征集

回复

文章分享lkhjlbh 回复了问题 • 22 人关注 • 26 个回复 • 3507 次浏览 • 2017-03-22 17:58 • 来自相关话题

beego filter

回复

有问必答qqqqq 回复了问题 • 3 人关注 • 3 个回复 • 719 次浏览 • 2017-03-09 10:17 • 来自相关话题

beego orm 支持存储过程的调用么?

回复

有问必答andy 发起了问题 • 1 人关注 • 0 个回复 • 676 次浏览 • 2017-03-05 20:15 • 来自相关话题

beego问题

回复

有问必答astaxie 回复了问题 • 3 人关注 • 3 个回复 • 849 次浏览 • 2017-01-16 23:32 • 来自相关话题

beego有防止页面重复提交的功能吗

回复

有问必答pathbox 回复了问题 • 4 人关注 • 5 个回复 • 1137 次浏览 • 2017-01-04 22:01 • 来自相关话题

在Beego中使用Jade模板

文章分享astaxie 发表了文章 • 1 个评论 • 840 次浏览 • 2016-11-21 21:20 • 来自相关话题

Jade是一个高性能的HTML模板引擎,它受到Haml的影响,是使用JavaScript实现的。Jade在客户端也有支持,它的代码比html可读性要高很多,Jade是一个比较常用的HTML模板。 Beego是一个go语言的web应用程序开源web框架,而... 查看全部

Jade是一个高性能的HTML模板引擎,它受到Haml的影响,是使用JavaScript实现的。Jade在客户端也有支持,它的代码比html可读性要高很多,Jade是一个比较常用的HTML模板。
Beego是一个go语言的web应用程序开源web框架,而Beego从1.7.0开始支持更加复杂的模板引擎,当然也包括了对于jade的支持,支持更复杂模板引擎的PR地址https://github.com/astaxie/beego/pull/1940
在介绍Jade的使用之前先来看下Go下面的html/template包。


html/template


在Go语言中,html/template包是一个很强大的html模板包,结合text/template的模板语法,基本上可以满足大部分的HTML模板需求,无论是Beego中是默认支持的两种模板格式.tpl和.html,以及jade和ace都是可以解析为html/template中的Template对象使用,就是说我们所使用的html模板最终都是基于html/template包实现的。
html/template使用实例:


package main
import (
"html/template"
)
type User struct {
Name string
}
func main() {
t := template.New("template example")
t, _ = t.Parse("hello {{.Name}}!")
p := User{Name: "jjz"}
t.Execute(os.Stdout, p)
}

上面的例子会输出字符串:hello jjz。
通过上面的例子我们可以看到,如何新建一个模板,再使用模板函数Parse()从字符串中加载模板内容,使用模板函数Execute()可以给模板替换字段。替换模板字段的语法,{{}}中的字段就是要替换字段,{{. Name}}表示需要替换的字段名称。
Beego使用复杂模板的方式很简单,增加一个模板引擎函数,在项目运行的时候遍历views中的文件,把指定的文件解析为template.Template对象,返回该对象提供使用,这个模板引擎函数就是:beego.AddTemplateEngine


AddTemplateEngine


beego.AddTemplateEngine是一个用来把指定的文件,转换为template.Template的对象的函数。它的第一个参数是文件的后缀名,在views中的含有此后缀名的文件都会进入该方法进行处理。他的第二个参数是一个函数,用来处理文件的转换,最后会返回一个template.Template的对象。有了这个函数,我们还少一个把jade文件解析为template.Template的方法,还好有人已经做了jade的Go语言实现。


jade.go


jade.go是Jade的Go语言实现。


jade.go的使用,首先安装jade.go:


go get github.com/Joker/jade

jade.go使用示例:


func main() {
tpl, err := jade.Parse("name_of_tpl", "doctype 5: html: body: p Hello world!")
if err != nil {
return
}
fmt.Printf( "%s", tpl )
}

输出字符串:


<!DOCTYPE html>
<html>
<body>
<p>Hello world!</p>
</body>
</html>

有了jade.go就可以在Beego中使用,把jade文件转换为Template对象,在beego中添加jade.go解析jade模板的方法:


func addJadeTemplate() {
beego.AddTemplateEngine("jade", func(root, path string, funcs template.FuncMap) (*template.Template, error) {
jadePath := filepath.Join(root, path)
content, err := utils.ReadFile(jadePath)
fmt.Println(content)
if err != nil {
return nil, fmt.Errorf("error loading jade template: %v", err)
}
tpl, err := jade.Parse("name_of_tpl", content)
if err != nil {
return nil, fmt.Errorf("error loading jade template: %v", err)
}
fmt.Println("html:\n%s",tpl)
tmp := template.New("Person template")
tmp, err = tmp.Parse(tpl)
if err != nil {
return nil, fmt.Errorf("error loading jade template: %v", err)
}
fmt.Println(tmp)
return tmp, err

})
}

jade.go目前只支持使用字符串的方式接卸jade模板,因此需要先把.jade文件的内容以字符串的方式读取出来。读取文件的方法:


func ReadFile(path string) (str string, err error) {
fi, err := os.Open(path)
defer fi.Close()
fd, err := ioutil.ReadAll(fi)
str = string(fd)
return
}

jade.go解析出的结果也是一个字符串,因此在代码中需要把字符串转换为template.Template对象,使用了 Template.Parse()方法。
解析jade模板的引擎方法需要在main()中调用,添加完jade的模板转换引擎之后,就可以在Beego中使用jade模板了。


jade模板的使用


首先定义一个页面home.jade:


doctype html
html
head
title pageTitle
body
h1 jade
.content {{.content}}

其中{{.content}}是需要替换的字段,Controller层代码:


func (c *MainController) Jade() {
c.Data["content"] = "this is jade template"
c.TplName = "home.jade"
}

运行之后生成的页面代码:


<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>pageTitle</title>
</head>
<body>
<h1>jade</h1>
<div class="content">this is jade template</div>
</body>
</html>

通过添加一个解析模板的引擎就可以在beego中使用jade的模板,beego从1.7.0之后开始支持复杂的模板引擎,不仅仅是对于jade的支持,也包括对于其他模板引擎的支持。
除了jade之外,在这个PR中推荐使用的是aceHTML模板引擎。


ace


ace是一个Go语言的HTML模板引擎,它借鉴了Slim和Jade,在Go语言里有超高的人气。


ace模板在beego中的使用与使用Jade类似,首先安装ace的依赖包:


go get github.com/yosssi/ace

在main函数中添加ace模板解析引擎:


func addAceTemplate()  {
beego.AddTemplateEngine("ace", func(root, path string, funcs template.FuncMap) (*template.Template, error) {
aceOptions := &ace.Options{DynamicReload: true, FuncMap: funcs}
aceBasePath := filepath.Join(root, "base")
aceInnerPath := filepath.Join(root, strings.TrimSuffix(path, ".ace"))
tpl, err := ace.Load(aceBasePath, aceInnerPath, aceOptions)
if err != nil {
return nil, fmt.Errorf("error loading ace template: %v", err)
}
return tpl, nil
})
}

注意使用ace模板需要指定一个base.ace,另外使用ace.Load()函数可以直接返回一个template.Template对象,不需要再做其他转换的工作。


添加完模板引擎之后就可以直接在views中添加.ace文件使用,新建一个home.ace文件:


= doctype html
html lang=en
head
meta charset=utf-8
title Base and Inner Template
body
h1 ace
.content {{.content}}

同样的{{.content}}是也需要在controller层本替换成需要的内容,controller层代码:


func (c *MainController)Ace() {
c.Data["content"] = "this is ace template"
c.TplName = "home.ace"
}

示例代码地址:https://github.com/jjz/go/tree/master/template


原文:https://segmentfault.com/a/1190000007532274

ModuleAB:基于beego框架开发的阿里云备份/归档解决方案

Go开源项目Xiphin 发表了文章 • 3 个评论 • 1012 次浏览 • 2016-10-26 11:50 • 来自相关话题

ModuleAB 第一个正式版本发布了,Module... 查看全部


ModuleAB 第一个正式版本发布了,ModuleAB 是阿里云备份/归档解决方案。


作者介绍:



TonyChyi




项目托管:





环境要求:




  1. bower >= 1.7.6

  2. go >= 1.6

  3. beego framework >= 1.6.1

  4. redis >= 3.0.0

  5. mysql >= 5.6



服务端构建:


mkdir -p project/src
cd project/src
git clone --recursive https://github.com/ProjectModu ... erver moduleab_server
cd moduleab_server
go get -v
go get github.com/beego/bee
export PATH="$GOPATH/bin:$PATH"
make # you will get 'moduleab_agent.tar.gz'

客户端构建:


mkdir -p project/src
cd project/src
git clone --recursive https://github.com/ProjectModu ... Agent moduleab_agent
cd moduleab_agent
go get -v
make # you will get 'moduleab_agent.tar.gz'


PS: Then use the moduleab_server.tar.gz and moduleab_agent.tar.gz to deploy anywhere you want.(然后用moduleab_server.tar.gz、moduleab_agent.tar.gz部署到任何你想要的位置。)



服务端配置:


appname = moduleab_server
httpport = 7001
# run mode has following options:
# dev: development mode
# deb: debug mode, log will be HUGE!
# initdb: create data in database, DONT USE if you already have data in database.
# proc: production mode.
runmode = dev
autorender = false
copyrequestbody = true
EnableDocs = false

EnableAdmin = false
AdminHttpAddr = "localhost"
AdminHttpPort = 8088

sessionon = true

loginkey = 61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o

logFile = "logs/moduleab_server.log"
pidFile = "logs/moduleab_server.pid"

[database]
mysqluser = "ModulesAB"
mysqlpass = "ModulesAB"
mysqlurl = "127.0.0.1:3306"
mysqldb = "ModuleAB"
mysqlprefex = ""

[aliapi]
apikey= "TestAbcd" # Ali api key
secret="TestAAA" # Ali api secret
oasport=80
oasusessl=false

[redis]
host = "127.0.0.1:6379"
password = ""
key = "ModuleAB"

[websocket]
timeout=10
pingperiod=5

# policyrun use cron-like syntax: "s m h dom mon dow"
[misc]
checkoasjobperiod=10
policyrun="0 * * * * 1"

客户端配置:


server=http://localhost:7001
# you need to set this with the conf on server.
loginkey=guess?
# loglevel might be
# debug, info, warn, error, fatal
loglevel=debug
uploadthreads=5
pidfile=moduleab.pid

本次改动如下:




  1. 客户端(Agent)的运行状态可以在服务端显示了

  2. 所有的可执行文件实现守护进程,自动运行于后台

  3. 客户端新增低内存模式,可运行于内存小于 1G 的机器

  4. 修复不能自动释放 TCP 连接的问题

  5. 修复当上传的文件带有后缀空格时引发阿里云 OSS 错误



问题反馈:



https://github.com/ProjectModuleAngelaBaby/ProjectModuleAB_Server/issues


beego log中增加request id的一种方式

文章分享edwinxie 发表了文章 • 6 个评论 • 1004 次浏览 • 2016-10-22 10:25 • 来自相关话题

有时候要在生产环境中追查问题,每个请求有一个唯一的request id对于定位问题十分有帮助。下面介绍一种非常简单的方式。

  1. 继承beego.Controller,重写其Prepare方法,在其中生成request id并写入到当... 查看全部

有时候要在生产环境中追查问题,每个请求有一个唯一的request id对于定位问题十分有帮助。下面介绍一种非常简单的方式。



  1. 继承beego.Controller,重写其Prepare方法,在其中生成request id并写入到当前上下文的数据存储结构体中:
    requestId := uuid.NewV4().String()
    this.Ctx.Input.SetData("requestId", requestId)

  2. 其他地方使用request Id
    rid := this.Ctx.Input.GetData("requestId").(string)
    beego.Info("profile request, request ID:", rid)

beego相关讨论