go get github.com/astaxie/beego
go get github.com/beego/bee
最好將bin文件夾中的bin.exe加入GOPATH環境變量,全局生效;偷懶的方法是將bin.exe拷貝到須要使用的文件夾下html
在須要建立項目的src目錄下使用命令:bee new project或bee api project便可自動建立一個新項目,兩者都須要在$GOPATH/src目錄下運行。區別在於bee api 建立的項目不會建立view目錄等主要用於提供接口的項目。在新項目的根目錄下使用命令:bee run便可運行,以下圖所示mysql
此時可經過在瀏覽器訪問http://localhost:8080/運行此項目,以下圖所示git
app.conf文件github
#配置文件 #項目名稱 appname = study #監聽端口 httpport = 8080 #運行模式 runmode = dev #自動渲染,默認true #autorender = false #模板路徑,默認views,能夠經過如下自定義路徑 #viewspath = myviews #不一樣級別的配置 [dev] httpport = 8080 [test] httpport = 8081 [onl] httpport = 8082 #多個配置文件,能夠經過include包含 #include "app1.conf"
main.go文件sql
package main import ( //_ 表明只想調用router.go文件下的init方法 _ "study/routers" "github.com/astaxie/beego" ) func main() { beego.Run() }
router.go文件數據庫
package routers import ( "study/controllers" "github.com/astaxie/beego" ) func init() { beego.Router("/", &controllers.MainController{}) beego.Router("/login",&controllers.LoginController{}) beego.Router("/test", &controllers.LoginController{},"post:Test")//自定義方法和規則 }
default.go文件api
package controllers import ( "github.com/astaxie/beego" ) type MainController struct { beego.Controller } func (c *MainController) Get() { c.Data["Website"] = "beego.me" c.Data["Email"] = "astaxie@gmail.com" c.TplName = "index.tpl" }
login.go文件瀏覽器
package controllers import "github.com/astaxie/beego" type LoginController struct { beego.Controller } func (this *LoginController) Get() { this.TplName = "login.tpl" } func (c *LoginController) Test() { c.TplName = "login.tpl" }
login.tpl文件cookie
<!DOCTYPE html> <html> <head> <title>Beego</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> login </body> </html>
此時下圖報錯緣由是因爲自定義方法中設置了只能夠經過post請求才能訪問session
更多相關路由設置能夠參考官方文檔:https://beego.me/docs/mvc/controller/router.md
package controllers import ( "github.com/astaxie/beego" ) type xxxController struct { beego.Controller } func (this *xxxController) Get() { this.Data["name"] = "zhangsan" this.Data["age"] = 16 this.TplName = "index.tpl" }
beego.Controller擁有不少方法,其中包括Init,Prepare,Post,Get,Put,Delete,Head等方法,能夠經過重寫的方式來實現這些方法,上面的代碼就是重寫了Get方法
咱們常常須要獲取用戶傳輸的數據,包括GET、POST等方式的請求,beego裏面會自動解析這些數據,能夠經過以下方式獲取數據:
GetString(key string)string GetStrings(key string)[]string GetInt(key string)(int64,error)
GetBool(key string)(bool,error) GetFloat(key string)(float64,error)
func (this *LoginController) Input() { id := this.GetString("id") this.Ctx.WriteString("<font style = \"color:red\">" + id + "</font>") }
type User struct{ Username string Password string } func (this *LoginController) Get() { //this.TplName = "login.tpl" u := User{} if err := this.ParseForm(&u); err != nil{ //process err } this.Ctx.WriteString("Username:" + u.Username + " Password:" + u.Password) }
如何獲取Request Body裏的內容:
this.Ctx.SetCookie("name",name,maxage,"/");
this.Ctx.SetCookie("pwd",Md5([]byte(pwd)),maxage,"/")
this.Ctx.GetCookie("name")
this.Ctx.GetCookie("pwd")
sessionon = true
beego.BConfig.WebConfig.Session.SessionOn = true
SetSession(name string,value interface{}) GetSession(name string) interface{}
DelSession(name string) SessionRegenerateID() DestroySession()
go get github.com/astaxie/beego/orm
import ( _ "github.com/go-sql-driver/mysql" "fmt" "database/sql" )
package controllers import ( "github.com/astaxie/beego" _ "github.com/go-sql-driver/mysql" "github.com/astaxie/beego/orm" "fmt" ) type ModelController struct { beego.Controller } type UserInfo struct { Id int64 Username string Password string } func (c *ModelController) Get() { orm.Debug = true//開啓調試模式 orm.RegisterDataBase("default","mysql", "root:111111@tcp(127.0.0.1:3306)/test?charset=utf8") orm.RegisterModel(new(UserInfo)) o := orm.NewOrm() user := UserInfo{Username:"zhangsan",Password:"123456"} id,err := o.Insert(&user) c.Ctx.WriteString(fmt.Sprintf("id:%d err:%v",id,err)) //更新 //user.Id = 1 //o.Update(&user) //讀取 //user := UserInfo{Id:1} //o.Read(&user) //原生讀取 //var maps []orm.Params //o.Raw("select * from user_info").Values(&maps) //for _,v := range maps{ // c.Ctx.WriteString(fmt.Sprintf("user info:%v",v)) //} //QueryBuilder構造查詢 var users []User //獲取QueryBuilder對象,須要指定數據庫驅動參數 qb,_ := orm.NewQueryBuilder("mysql") //構建查詢對象 qb.Select("user.name","profile.age"). From("user").InnerJoin("profile").On("user.id_user = profile.fk_user").Where("age > ?"). OrderBy("name").Desc().Limit(10).Offset(0) //導出sql語句 sql := qb.String() //執行sql or := orm.NewOrm() or.Raw(sql,20).QueryRows(&users) }
go get github.com/astaxie/beego/config
//初始化一個解析器對象 iniconf,err := NewConfig("ini","testini.conf") if err != nil{ t.Fatal(err) } iniconf.String("appname")
//ini配置文件支持section操做,key經過section::key的方式獲取 [demo] key1 = "asta" key2 = "xie" 經過iniconf.String("demo::key2")獲取key2值
//經過httplib獲取豆瓣首頁 package controllers import ( "github.com/astaxie/beego" "github.com/astaxie/beego/httplib" ) type TestHttpLibController struct { beego.Controller } func (c *TestHttpLibController) Get() { req := httplib.Get("http://www.douban.com") str,err := req.String() if err != nil{ panic(err) } //c.Ctx.WriteString("test") c.Ctx.WriteString(str) }