go 语言
语法简明紧凑;
语法一致
(对比 c static关键字,static 在不同的地方含义不同
c++ vector<vector<int> > //注意> 后的空格必须有,不然会被当成 右移操作
噪音少:减少不必要 ()括号 ;分号
go help gopath
beego安装
zhaozhiangdeMBP:server zhaozhiliang$ go get -u github.com/astaxie/beego
bee 工具
是 个工具包
beego 项目创建
热编译
开发测试
部署
bee工具安装:
zhaozhiangdeMBP:server zhaozhiliang$ go get -u github.com/beego/bee
验证:> bee version
beego框架介绍
特点: 快速开发, mvc架构, 文档齐全,社区活跃
模块化设计;各个模块是解耦的,可以单独使用某个模块,或者用其他库模块替代
beego 的组成:
cache config context htttplibs logs orm session toolbox
cache 支持四种引擎; 文件; 内存; memcache; redis
config 支持 解析四种文件格式: ini json xml yaml
context; 包含 request; response
httplibs :
支持get, post, put ,delete, head
支持https
支持超时设置
支持文件上传
logs
多种输出引擎; 支持异步输出
bee工具应用
bee new :新建项目结构
bee run : 自动编译部署
bee generate : 自动生成代码
zhaozhiangdeMBP:src zhaozhiliang$ bee new imooc
zhaozhiangdeMBP:imooc zhaozhiliang$ bee generate scaffold user -fields="id:int64,name:string,gender:int,age:int" -driver=mysql -conn="work:123qwe@tcp(192.168.199.129:3306)/go"
路由注解:
不需要在 route.php 中注册路由
app.conf
runmode = prod
bee pack //打包项目
健康检测:
app.conf 添加
EnableAdmin = true
在main package 添加文件内容如下:
type DatabaseCheck struct {
}
func ( * DatabaseCheck) Check() error{
_, err := sql.Open("mysql", "work:123qwexx@tcp(192.168.199.129:3306)/go")
//写的有问题,判断err 不足以说明 数据库连接ok
if err != nil{
return err
}
return nil
//return errors.New("conn failed")
}
func init(){
toolbox.AddHealthCheck("database", &DatabaseCheck{})
}
控制器中GET, POST方法
// @router /video/:id [get]
func (c *MainController) Get() {
//name:=c.GetString("name")
//c.Data["Website"] = name
//c.Data["Email"] = "[email protected]"
//c.TplName = "index.tpl"
var subject models.Subject
err := func() error {
id, err := c.GetInt("id")
beego.Info(id)
if err != nil{
id = 1
}
subject, err = models.GetSubject(id)
fmt.Printf("subject%T", subject);
if err != nil{
return errors.New("subject not exists")
}
return nil
}()
if err != nil{
c.Ctx.WriteString("wrong params")
}
var option map[string]string
if err = json.Unmarshal([]byte(subject.Option), &option); err != nil{
c.Ctx.WriteString("wrong params, json decode")
}
c.Data["ID"] = subject.Id
c.Data["Option"] = option
c.Data["Img"] = "/static" + subject.Img
c.TplName = "guess.tpl"
}
// @router /video [post]
func (c *MainController) Post(){
var subject models.Subject
err := func() error {
id, err := c.GetInt("id")
beego.Info(id)
if err != nil{
id = 1
}
subject, err = models.GetSubject(id)
if err != nil{
return errors.New("subject not exists")
}
return nil
}()
if err != nil{
c.Ctx.WriteString("wrong params")
}
answer := c.GetString("key")
right := models.Answer(subject.Id, answer)
c.Data["Right"] = right
c.Data["Next"] = subject.Id + 1
c.Data["ID"] = subject.Id
c.TplName = "guess.tpl"
}
在localhost:8088 查看 healthcheck 情况