Beego的安装
- 安装 Go 1.1+ 以确保所有功能的正常使用。
- 下载Beego 和 Bee 的开发工具
$ go get -u github.com/astaxie/beego $ go get -u github.com/beego/bee
讯享网
- 为了更加方便的操作,请将
$GOPATH/bin加入到你的$PATH变量中。请确保在此之前您已经添加了$GOPATH变量。
讯享网例如:E:\Workplace_Go\bin
Beego 架构图
创建 Beego HelloWord
>cd %GOPATH%/src >bee new hello >cd hello >bee run
MVC结构如下:
讯享网├── conf │ └── app.conf ├── controllers │ └── default.go ├── main.go ├── models ├── routers │ └── router.go ├── static │ ├── css │ ├── img │ └── js │ └── reload.min.js ├── tests │ └── default_test.go └── views └── index.tpl
一旦程序开始运行,您就可以在浏览器中打开 http://localhost:8080/ 进行访问。
beego路由请求
可用的 HTTP Method:
- *: 包含以下所有的函数
- get: GET 请求
- post: POST 请求
- put: PUT 请求
- delete: DELETE 请求
- patch: PATCH 请求
- options: OPTIONS 请求
- head: HEAD 请求
如果同时存在 * 和对应的 HTTP Method,那么优先执行 HTTP Method 的方法。
bee常用的命令
- bee new <项目名> :创建一个项目,这样的项目一般是web项目
- bee api myapi : 创建一个api项目
- bee run 命令是监控 beego 的项目,通过 fsnotify监控文件系统。
beego框架之日志模块
beego框架之日志模块默认支持4种记录方式:
1. 终端输出(console) :这种方式一般用在开发环境下面,方便调试。
2. 本地文件(file) :这种方式一般用来保存常规日志,为生产环境中常用的方式。
3. 网络方式(network):这种方式可以用来将日志发送到指定服务器,一般可以用来根据日志触发事件等。
4. 发送邮件(email) :这种方式一般是将生产环境下比较重要的日志发送给相应的管理人员,以便及时发现和解决问题。
beego框架之日志模块等级定义在github.com/astaxie/beego/logs/log.go:(级别以此递减)
const (
LevelEmergency = iota // 紧急级别
LevelAlert // 报警级别
LevelCritical // 严重错误级别
LevelError // 错误级别
LevelWarning // 警告级别
LevelNotice // 注意级别
LevelInformational // 报告级别
LevelDebug // 除错级别
)
1.终端输出(console)记录方式示例:
package main import ( "github.com/astaxie/beego/logs" ) func main() { log := logs.NewLogger(10000) // 创建一个日志记录器,参数为缓冲区的大小 log.SetLogger("console", "") // 设置日志记录方式:控制台记录 log.SetLevel(logs.LevelDebug) // 设置日志写入缓冲区的等级:Debug级别(最低级别,所以所有log都会输入到缓冲区) log.EnableFuncCallDepth(true) // 输出log时能显示输出文件名和行号(非必须) log.Emergency("Emergency") log.Alert("Alert") log.Critical("Critical") log.Error("Error") log.Warning("Warning") log.Notice("Notice") log.Informational("Informational") log.Debug("Debug") log.Close() } 程序输出: 2015/06/29 12:01:07 [main.go:13] [M] Emergency 2015/06/29 12:01:07 [main.go:14] [A] Alert 2015/06/29 12:01:07 [main.go:15] [C] Critical 2015/06/29 12:01:07 [main.go:16] [E] Error 2015/06/29 12:01:07 [main.go:17] [W] Warning 2015/06/29 12:01:07 [main.go:18] [N] Notice 2015/06/29 12:01:07 [main.go:19] [I] Informational 2015/06/29 12:01:07 [main.go:20] [D] Debug 备注:如果log.SetLevel(logs.LevelDebug)修改为log.SetLevel(logs.LevelEmergency),则只输出Emergency级别的log,其他级别的log不会输出。
- 本地文件(file)记录方式示例
讯享网package main import ( "github.com/astaxie/beego/logs" ) func main() { log := logs.NewLogger(10000) // 创建一个日志记录器,参数为缓冲区的大小 // 设置配置文件 jsonConfig := `{ "filename" : "test.log", // 文件名 "maxlines" : 1000, // 最大行 "maxsize" : 10240 // 最大Size }` log.SetLogger("file", jsonConfig) // 设置日志记录方式:本地文件记录 log.SetLevel(logs.LevelDebug) // 设置日志写入缓冲区的等级 log.EnableFuncCallDepth(true) // 输出log时能显示输出文件名和行号(非必须) log.Emergency("Emergency") log.Alert("Alert") log.Critical("Critical") log.Error("Error") log.Warning("Warning") log.Notice("Notice") log.Informational("Informational") log.Debug("Debug") log.Flush() // 将日志从缓冲区读出,写入到文件 log.Close() } 输出结果:test.log 2015/06/29 12:55:29 [main.go:19] [M] Emergency 2015/06/29 12:55:29 [main.go:20] [A] Alert 2015/06/29 12:55:29 [main.go:21] [C] Critical 2015/06/29 12:55:29 [main.go:22] [E] Error 2015/06/29 12:55:29 [main.go:23] [W] Warning 2015/06/29 12:55:29 [main.go:24] [N] Notice 2015/06/29 12:55:29 [main.go:25] [I] Informational 2015/06/29 12:55:29 [main.go:26] [D] Debug
beego框架之orm模块
beego ORM 是一个强大的 Go 语言 ORM 框架,orm模块主要是处理MVC中的M(models)。
beego框架之Context模块

beego框架之Cache模块
参考地址:https://www.jianshu.com/p/0db57ea057ce
cache模块是beego中的一个独立模块,这个模块的设计方式是经典的工厂模式。
cache.go:抽象接口部分、注册部分、模块以外的初始化。
memory:memorycache
file:filecache
cache/memcache:封装的是memcache
cache/redis:封装的是redis
cache/ssdb:封装的是ssdb
beego框架之config模块
首先要搞清楚一点Config在整个beego框架承担的任务:提供Ini、yaml、xml、json、env等方式参数配置,并提供了不同config方式的接口。
config构成
config对应beego项目的config包构成涉及了env(env配置)、xml(xml配置)、yaml(yaml配置)、ini(ini配置,也是默认方式)、json(json配置方式)、fake(伪造配置类)、config(配置功能接口)
2.剖析
2.1 Configer接口
该接口定义如何从配置原始数据获取或设置内容相关规范行为,而完成最终的操作是由具体实现Configer接口的具体Configer类来完成的。
IniConfigContainer:ini配置类
JSONConfigContainer:json配置类
ConfigContainer:yaml配置类
ConfigContainer:xml配置类
关于env是没有配置类, 实际上env只需要get、set操作即可: env-key:env-value形式
前面四种配置类采用的类似database/sql模式,定义两部分接口配置文件的Parse(见Config接口部分)和Operation,其具体实现配置类则根据自己的实际情况实现对应的接口(后面会有专门的源码来进行说明)
2.2 Config接口
该接口定义对应的配置文件的Parse操作,主要通过解析配置文件获取其原始数据内容绑定到Configer,可进行Configer里面的get、set等操作
2.3 Register方法
该方法主要完成将不同配置类型及其具体配置实现类进行注册,能够在本地进行缓存,便于使用。通过map[string]Config来存放。
2.4 NewConfig方法和NewConfigData方法
新建Config:第一个根据filepath来新建,第二种直接根据文件内容来新建;其中第一个参数adapterName包括:ini/json/xml/yaml
beego框架之httplib模块
httplib简单使用
req := httplib.Get("http://beego.me/") str, err := req.String() if err != nil { t.Fatal(err) } fmt.Println(str)
支持的请求方法
讯享网Get(url string) Post(url string) Put(url string) Delete(url string) Head(url string)
支持超时
req.SetTimeout(connectTimeout, readWriteTimeout) httplib.Get("http://beego.me/").SetTimeout(100 * time.Second, 30 * time.Second)
设置请求参数
讯享网1. 方法一 req := httplib.Post("http://beego.me/") req.Param("username","astaxie") req.Param("password","") 2. 方法二 req := httplib.Post("http://127.0.0.1:9999") req.JSONBody(map[string]interface{}{"jsonrpc":"2.0","method":"eth_blockNumber","id":83}) var js interface{} req.ToJSON(&js) fmt.Println(js) 3. 方法三 发送大片的数据 req := httplib.Post("http://beego.me/") bt,err:=ioutil.ReadFile("hello.txt") if err!=nil{ log.Fatal("read file err:",err) } req.Body(bt)
beego框架之session模块
参考https://www.cnblogs.com/liaojiafa/p/8137317.html
beego.BConfig.WebConfig.Session.SessionOn = true
或者通过配置文件配置如下:
讯享网sessionon = true
session 有几个方便的方法
1. SetSession(name string,value interface{}) 2. GetSession(name string,) interface{} 3. DelSession(name string) 4. SessionRegenerateID() 5. DestorySession()
讯享网测试代码:
package routers
import (
"WEB/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/test_login", &controllers.TestLoginController{}, "post:PostData;get:Login") // 唯一添加了这条
}
// testlogin
package controllers
import (
"github.com/astaxie/beego"
)
type TestLoginController struct {
beego.Controller
}
func (c *TestLoginController) SelfTest() {
c.Ctx.WriteString("this is myself controller!")
}
func (c *TestLoginController) Login() {
name := c.Ctx.GetCookie("name")
password := c.Ctx.GetCookie("password")
if name != "" {
c.Ctx.WriteString("Username:" + name + "password:" + password)
} else {
formData := `<html><form action="/test_login" method="post">
<input type="text" name="Username">
<input type="password" name="Password">
<input type="submit" value="post">
</html>
`
c.Ctx.WriteString(formData)
}
}
func (c *TestLoginController) PostData() {
u := User{}
if err := c.ParseForm(&u); err != nil {
}
c.Ctx.SetCookie("name", u.Username, 100, "/") // 设置cookie
c.Ctx.SetCookie("password", u.Password, 100, "/") // 设置cookie
c.Ctx.WriteString("username:" + u.Username + " password:" + u.Password)
}
beego框架之toolbox模块
beego的toolbox模块,包括了以下几个功能:健康检查、性能调试、访问统计、计划任务。今天要了解的就是这个计划任务功能,首先你需要安装这个包,github.com/astaxie/beego/toolbox。下面我们具体看如何使用,以一个例子演示。 package main import ( "github.com/astaxie/beego" "github.com/astaxie/beego/toolbox" "fmt" "time" ) func main() { tk := toolbox.NewTask("myTask", "0 07 13 * * *", func() error { fmt.Println("hello world"); return nil }) err := tk.Run() if err != nil { fmt.Println(err) } toolbox.AddTask("myTask", tk) toolbox.StartTask() time.Sleep(6 * time.Second) toolbox.StopTask() beego.Run() }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/35287.html