學習go語言也有一段時間了,正好手頭自己家公司的官網,算一個無關緊要的小專案,就用go語言來練練手,實戰一個。
在框架上選擇了成熟的beego專案。
Beego提供了完整的MVC解決方案和專案構建工具,通過bee命令可以簡單地建立、編譯、執行、釋出一個WEB或者API專案。官方的文件相當完整詳盡而且全是中文,真是好得不要不要的。
###建立專案
第一步當然是建立一個新專案。此處基本是按照文件的走。
首先安裝beego
go get github.com/astaxie/beego
複製程式碼
beego的安裝路徑是在GOPATH/bin目錄中。官方建議將此目錄新增到path,其實不新增也一樣可以用。
專案目標路徑位於GOPATH/src/xohome,新建專案的命令如下:
src$ ../bin/bee new xohome
複製程式碼
然後會自動在src/xohome下生成響應的專案結構,具體結構請參照文件,在此不細說了。
至此專案就已經可以執行了,在xohome下執行命令
../../bin/bee run
複製程式碼
然後訪問預設的8080埠,就可以看到beego的logo了。
###Controller與模板
在新建好的專案中,已經有了預設的controller,位於controller目錄下的default.go檔案。還有預設的router.go檔案。
type MainController struct {
beego.Controller
}
func (c *MainController) Get() {
c.Data["Website"] = "beego.me"
c.Data["Email"] = "astaxie@gmail.com"
c.TplName = "index.tpl"
}
複製程式碼
default.go檔案的預設內容如上。beego基於go語言自帶的模板對頁面進行渲染。在預設建立的目錄結構中,模板檔案位於views目錄下,而靜態資源則位於static目錄下。若要訪問靜態資源,直接訪問/static/...即可。
很多時候都是通過對controller結構體進行賦值來進行操作。這一點上與java的基於方法進行操作有較大的不同。當然也有很多常見的方法。比如下面這個用來提交表單的controller:
type SubmitController struct {
beego.Controller
}
func (c *SubmitController) Get(){
c.TplName = "start.tpl"
}
type ResultJson struct {
State int
Message string
}
func (c *SubmitController) Post(){
var project = models.Projects{};
project.Money = c.GetString("money","")
project.About = c.GetString("about","")
project.Time = c.GetString("time","")
project.Contact = c.GetString("contact","")
project.Name = c.GetString("name","")
project.Type,_ = c.GetInt("type",0)
o := orm.NewOrm()
o.Using("xohome")
_,e := o.Insert(&project)
if(e == nil){
res := ResultJson{State:0,Message:"success"}
c.Data["json"] = res
c.ServeJSON()
return
}else{
res := ResultJson{State:1,Message:"處理髮生錯誤"}
c.Data["json"] = res
fmt.Print(e.Error())
c.ServeJSON()
return
}
}
複製程式碼
程式碼很簡單,走Get方法的時候返回個頁面,走Post方法的時候儲存至資料庫並返回一個json。
controller需要在router中進行註冊,預設案例如下:
func init() {
beego.Router("/", &controllers.MainController{})
beego.Router("/start", &controllers.SubmitController{})
}
複製程式碼
在init()方法中進行註冊,在預設的main.go檔案中,有如下引用:
_ "xohome/routers"
複製程式碼
來執行此方法。
###資料庫操作
有眼尖的朋友已經見到上一部分中的資料庫操作。這是beego提供的orm模組。
這個orm模組用起來也是很簡單,首先需要引入一個資料庫驅動,比如mysql的驅動:
_ "github.com/go-sql-driver/mysql"
複製程式碼
然後找個地方初始化一下orm的配置:
func init() {
orm.RegisterDriver("mysql", orm.DRMySQL)
orm.RegisterDataBase("default", "mysql", "username:password@tcp(mysql.com:3449)/xohome?charset=utf8")
}
複製程式碼
我將這兩行程式碼放在了main.go檔案中,其實只要能夠保證一開始就執行,放在哪都差不多。
然後的操作程式碼就如上一段所示
o := orm.NewOrm()
o.Using("default")
_,e := o.Insert(&project)
複製程式碼
是不是特別的簡單呢?插入的表就是project結構體的名稱。beego還支援一對多,多對多等對映,自定義表名,事務控制等高階功能,可以去檢視官方文件進一步學習。
###專案部署
beego提供了打包的工具,只要執行命令如下:
GOOS=linux ../../bin/bee pack
複製程式碼
看過我之前的文章應當知道,GOOS是go語言跨平臺編譯的引數,指定為linux就可以打包成linux下可用的tar.gz檔案。然後直接上傳上去解壓執行即可。繼承了go語言部署簡單的傳統。
###結束語
恩,沒有了。
本來就是一個非常簡單,只有兩個頁面的展示性首頁。但是充分展示了go語言開發web應用的潛力。go完整的工具鏈,簡潔的api風格,方便的部署方式相信也有所體會。
接下來還要繼續去研究我的檔案服務,這個東西就到此為止了。