參考
- 用Beego開發web應用?https://www.cnblogs.com/zhangweizhong/p/10919672.html
- Beego官網?Homepage - beego: simple & powerful Go app framework
- build-web-application-with-golang?https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/preface.md
- Beego開發文檔?寫在前面的話 · beego開發文檔 · 看云
作者寫這個工具的時候,beego 2.0還沒有發布,所以用的是beego 1.12.3,用2.0的同學,可以自己改造下。
目錄
一、安裝
二、創建應用
2.1 conf
2.2 controllers
2.3 routers
2.4 static 和 views目錄
2.5 models和data
三、Beego的配置
3.1?配置監聽端口
3.2 static
3.3?證書的設置
3.4 日志設置
一、安裝
go get github.com/astaxie/beego
go get github.com/beego/bee
注意: beege和bee是兩個概念。beego是框架,bee是工具,是命令。 在安裝Beego前,先確認是否將$GOPATH/bin寫入GO環境中。
二、創建應用
bee new webDemo //創建一個web應用
也不一定非要用這個命令,只要創建好對應的目錄,放好文件就可以了。
目錄結構如下:
2.1 conf
這個目錄是beego的配置文件目錄,里面有個app.conf文件,你可以配置任何你想要的東西。
2.2 controllers
這個目錄主要是各個url的實現,我們作為WEB的服務端,主要的任務就是處理各個URL的消息。
當然不一定非要是這個名字,主要是當前主流默認這么寫的。
// LoginController
type LoginController struct {beego.Controller
}
//登錄頁面
func (c *LoginController) Get() {c.TplName = "login.html"
}//登錄功能
func (c *LoginController) Post() {}// LogoutController
type LogoutController struct {beego.Controller
}//登錄退出功能
func (c *LogoutController) Post() {}
2.3 routers
這個目錄是路由的定義,就是定義某個URL是由哪個controller去處理。
package routersimport ("../controllers""github.com/astaxie/beego"
)func Init() {beego.Router("/home/login", &controllers.LoginController{})beego.Router("/home/logout", &controllers.LogoutController{})
}
這里我定義的是兩個URL,登陸和退出,分別由對應的controller去處理。
當然還另外一種定義方法:
package routersimport ("../controllers""github.com/astaxie/beego"
)func Init() {beego.Router("/home/login", &controllers.AccessController{}, "get:HomeProcess")beego.Router("/home/login", &controllers.AccessController{}, "post:LoginProcess")beego.Router("/home/logout", &controllers.AccessController{},"post:LogoutProcess")
}
就是比第一種方法多了個參數,而且是在同一個controller中處理。 這里就是定義兩個URL分別由AccessController中的LoginProcess和LogoutProcess兩個函數處理。
這個方法好的一點就是不需要那么多controller,不好的一點當然是放在一起的時候,很容易混淆,代碼結構也看著不是很清晰。我更喜歡第一種方式。
2.4 static 和 views目錄
static是靜態訪問目錄。這里可以放置一些腳本之類的東西。
views是視圖的目錄,上面的get方法返回的login.html就是這個目錄,不需要特定指定,按照上面?c.TplName = "login.html"
的寫法,默認返回的是views 目錄的html頁面信息。
2.5 models和data
這倆目錄不是必須的,models可以放一些常量的定義,對象的定義等,數據類型的定義等。data目錄可以放一下數據處理的動作,比如讀寫數據庫,數據緩存等處理。
三、Beego的配置
這里介紹幾個簡單的,想要詳細了解,可以去看相應的開發文檔。
3.1?配置監聽端口
beego.BConfig.Listen.HTTPAddr = "127.0.0.1"beego.BConfig.Listen.HTTPPort = int(8080)beego.BConfig.Listen.HTTPSAddr = "127.0.0.1"beego.BConfig.Listen.HTTPSPort = int(8080)beego.BConfig.Listen.EnableHTTPS = truebeego.BConfig.Listen.EnableHTTP = false
指定對應的IP地址和監聽端口,并且指定是使用HTTP還是HTTPS,也可以倆都用,就是需要并行進行兩個監聽。
也可以從app.conf中讀取。通過beego的接口獲取配置文件中的內容。這個文件也可以自定義的,但是一般情況沒人這么搞,也沒有必要。
beego.BConfig.Listen.HTTPAddr = models.ServerHostbeego.BConfig.Listen.HTTPPort = models.ServerPortbeego.BConfig.Listen.HTTPSAddr = models.ServerHostbeego.BConfig.Listen.HTTPSPort = models.ServerPortport, err := beego.AppConfig.Int("httpport")if err == nil {beego.BConfig.Listen.HTTPPort = portbeego.BConfig.Listen.HTTPSPort = port}host := beego.AppConfig.String("serveraddr")if len(host) != 0 {beego.BConfig.Listen.HTTPSAddr = hostbeego.BConfig.Listen.HTTPAddr = host}beego.BConfig.Listen.EnableHTTPS = falsebeego.BConfig.Listen.EnableHTTP = true
3.2 static
beego.SetStaticPath("/url", "static")
這里設置靜態目錄,第一個參數是以127.0.0.1:8080為基礎的url,第二個是靜態路徑。
上面的代碼就是指定訪問127.0.0.1:8080/url的時候,返回static目錄中index.html,index.html是默認的文件,如果是其他文件,可以在controllers中進行定義。
3.3?證書的設置
如果使用https,那么必然是要使用證書的,證書的生成可以使用openssl命令生成,這個網上有很多的教程。
sslEnable, _ := beego.AppConfig.Bool(models.SSL_ENABLE)if sslEnable {beego.BConfig.Listen.EnableHTTPS = truebeego.BConfig.Listen.EnableHTTP = false}beego.BConfig.Listen.HTTPSCertFile = models.GetCertPemFile()beego.BConfig.Listen.HTTPSKeyFile = models.GetCertNewKeyFile()tlsConfig, err := models.GetTLSConfig()if err == nil {beego.BeeApp.Server.TLSConfig = tlsConfig}
// 獲取TLS配置
func GetTlsConfig() (*tls.Config, error) {var config *tls.ConfigcaCert := GetCaCertFile()pool, errPool := GetX509CACertPool(caCert)if errPool != nil {log.Error("generate certPool failed: %v", errPool)return config, errPool}config = &tls.Config{RootCAs: pool,ClientAuth: tls.NoClientCert,MinVersion: tls.VersionTLS12,CipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256},}return config, nil
}
上面這部分是證書的配置內容,只是簡單的示例。
3.4 日志設置
jsonConfig := `{"filename": "./log/server.log","daily": true,"maxdays": 7,"maxsize": 10240000}`_ = log.SetLogger("file", jsonConfig)log.SetLevel(log.LevelDebug)log.EnableFuncCallDepth(true)log.SetLogFuncCallDepth(4)log.Debug("=======================start server================================")