GoLang-Beego.Godep
介紹
你是一個從PHP,Python,Ruby等動態(tài)語言轉(zhuǎn)移到Go的web應用開發(fā)人員嗎症杏?想知道怎樣使用Go開發(fā)基于web的應用程序嗎厉颤?你想要知道怎樣使用類似于已知的框架的方式進行開發(fā)喧伞,在那兒你能重復的利用已知的知識潘鲫?
如果是這樣溉仑,那么你可能已經(jīng)做了一些搜索,無論是在谷歌怨喘,StackOverflow的或其他網(wǎng)站必怜,以尋求一個框架來幫助你;你可能已經(jīng)看到了有許多可能的選擇后频,包括Beego,Martini和Gorilla,另外還有net/http包驻售。
這四個當中欺栗,我嘗試的最多的就是Beego征峦。我認為眶痰,它的功能十分的豐富竖伯,但是不太復雜因宇,因此上手是相對較快的察滑。
0人頂
頂 翻譯的不錯哦!
Beego不是一般的web開發(fā)包贺辰。它構(gòu)建在大量已存在的Go之上饲化,提供了許多的功能吃靠,以下是提供的功能:
一個完整的ORM
緩存
支持session
國際化(i18n)
實時監(jiān)測和重載
發(fā)布支持
但是同時在Beego和以前提到的動態(tài)語言的框架也有一些相似性。他們之間有足夠的差異礁阁,在成為真正的生產(chǎn)力和精通之前需要投入一些時間姥闭。
此外棚品,雖然Beego的文檔是比較全面的,我還是感覺到它的文檔在某些地方有所缺失掺涛,因為我寫了這兩個部分的系列文章幫助克服這個問題并幫助你學習Beego的基礎薪缆。
0人頂
頂 翻譯的不錯哦!
在這個系列中拣帽,你將會了解到它是一個多么出色的框架以及它是多么的為我們這些開發(fā)者著想减拭。具體到部分一中拧粪,我們將會包含以下內(nèi)容:
安裝Beego以及命令行工具Bee
創(chuàng)建一個項目Creating a project
動作(Actions)
視圖于模板(Views / Templates)
路由
請求參數(shù)(Request Parameters)
如果你想要閱讀這個系列的全部的源碼沧侥,你可以在Github中查看宴杀。你可以隨意的在線瀏覽或者克隆到本地并且拿它做實驗旺罢。讓我們開始吧扁达!
在我們開始之前,確保你已經(jīng)將GO語言環(huán)境配置好了穗酥。如果沒有砾跃,或者你不明白我在說什么抽高,先去看一下 Getting Started with Go 或者 this post from Bill Kennedy翘骂,然后再回來繼續(xù)。
0人頂
頂 翻譯的不錯哦!
- 安裝 Beego
Ok,讓我們從安裝Beego開始昌执。像其他一些框架和工具包(toolkit)一樣诈泼,通過使用bee命令行工具來創(chuàng)建項目框架铐达,Bee可以完成一些工作:
創(chuàng)建一個新的應用程序
運行一個應用程序
測試一個應用程序
創(chuàng)建路由以及其他
Bee并不是運行Beego應用的唯一一個方法瓮孙,但是我在這兩部分的系列教程中將著重講它的使用衷畦。你可以通過運行g(shù)o get github.com/beego/bee來安裝它知牌。
- 創(chuàng)建核心項目
安裝完之后角寸,在你的$GOPATH所在的目錄中運行下面的命令扁藕,將會生成一個項目的框架結(jié)構(gòu)亿柑,我們將其命名為sitepointgoapp
bee new sitepointgoapp
這將會輸出類似于下面的內(nèi)容:
[INFO] Creating application.../Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/conf//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/controllers//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/models//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/routers//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/tests//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/static//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/static/js//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/static/css//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/static/img//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/views//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/conf/app.conf/Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/controllers/default.go/Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/views/index.tpl/Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/routers/router.go/Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/tests/default_test.go/Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/main.go14-05-14 06:02:59 [SUCC] New application successfully created!
現(xiàn)在望薄,你將看到下面的文件目錄結(jié)構(gòu):
sitepointgoapp ├── conf | └── app.conf├── controllers| └── default.go├── main.go├── models├── routers | └── router.go├── static│ ├── css│ ├── img│ └── js├── tests│ └── default_test.go└── views └── index.tpl
觀察一下這些文件痕支,我們有:
主文件main.go
主要配置文件conf/app.conf
一個默認的控制器controllers/default.go
一個默認的測試集合tests/default_test.go
一個默認的視圖模板views/index.tpl
OK卧须,最基本的程序以及準備好了,讓我們運行一下它蹦漠。在項目目錄$GOPATH/src/sitepointgoapp/下车海,運行下面的命令:
bee run
這將會加載我們的新程序容劳。除此之外竭贩,bee還監(jiān)控源文件的改動留量。如果檢測到改動,bee將會自動的重新加載應用程序忆绰。運行完上面的命令之后错敢,你應該會看到類似于下面的輸出信息:
14-05-05 11:34:17 [INFO] Start building...14-05-05 11:34:20 [SUCC] Build was successful14-05-05 11:34:20 [INFO] Restarting sitepointgoapp ...14-05-05 11:34:20 [INFO] ./sitepointgoapp is running...2014/05/05 11:34:20 [I] Running on :8080
你可以看到應用程序已經(jīng)在8080端口上運行了稚茅。在瀏覽器中訪問http://localhost:8080/將會顯示下面的輸出:
這并沒有什么特別的地方亚享,但是它的確可以正常工作了欺税。那么晚凿,讓我們動手修改擴展一下默認的控制器晃虫,添加一個新的action哲银,以及一些自定義的路由。 中獎啦翻譯于 3 個月 前
0人頂
頂 翻譯的不錯哦!
- 添加一個新的action
打開controllers/default.go,你可以看到一個非常簡單的控制器盲泛。這是因為所有的顯示邏輯被放在了視圖模板中寺滚。讓我們稍微修改一下這個控制器村视,看看如何添加視圖模板變量以及如何指定一個模板文件酒奶。在default.go中惋嚎,添加如下方法:
func (main *MainController) HelloSitepoint() { main.Data["Website"] = "My Website" main.Data["Email"] = "your.email.address@example.com" main.Data["EmailName"] = "Your Name" main.TplNames = "default/hello-sitepoint.tpl"}
然我們看一下每一步的作用另伍。我們所做的是給當前的控制器添加了一個新的方法(或action)Get质况,通過將main MainController指定為這個方法的接收器结榄。
緊接著臼朗,我們初始化了三個模板變量视哑,Website*, Email 和 EmailName誊涯,把它們保存在Controller的一個叫Data的字段里面暴构,該字段是一個map用來表示模板變量和值。
之后苹支,我將this.TplNames的值設置為default/hello-sitepoint.tpl來指定模板文件的名稱债蜜。默認情況下寻定,Beego會在views文件夾下查找指定的文件特姐。
因此黍氮,當這個路由起作用的時候唐含,Beego將會填充views/default/hello-sitepoint.tpl模板,并渲染它沫浆。
0人頂
頂 翻譯的不錯哦!
視圖
好了捷枯,讓我們創(chuàng)建和它對應的視圖。在views文件夾下专执,創(chuàng)建一個新的文件夾default淮捆,然后在其中創(chuàng)建一個名為hello-sitepoint.tpl的新文件,將下面的代碼寫在里面:
<header class="hero-unit"> <div class="container"> <div class="row"> <div class="hero-text"> <h1>Welcome to the Sitepoint / Beego App!</h1> <h2>This is My Test Version</h2> <p>{{.Website}} {{.Email}} {{.EmailName}}</p> </div> </div> </div></header>
如果這是你第一次在Go中使用模板攀痊,要知道一點,Beego的模板層繼承自 Go 的 html/template package拄显。想了解更多在模板中使用變量的例子苟径,請參考text/template包中的例子。
和大多數(shù)Go的包一樣躬审,html/template的功能很多棘街,所以我在這里介紹幾個相關(guān)的功能。所有的模板變量都屬于全局的上下文承边,可以通過點操作符來訪問遭殉,通過{{}}語法來嵌入。
所以博助,想要訪問我們在之前在controller的action中定義的那山歌模板變量险污,可以使用{{.Website}},{{.Email}}, 和 {{.EmailName}}。
0人頂
頂 翻譯的不錯哦!
路由
Ok富岳,我們現(xiàn)在有了一個新的action和對應的視圖蛔糯。但是我們還不能進行路由拯腮。如果我們像訪問默認action之外的任何東西都會得到一個404錯誤頁面,如下面這個截圖所示渤闷。
所以疾瓮,我們需要給它添加一個路由。在routers/router.go 中飒箭,將init方法改為下面這樣:
func init() { beego.Router("/", &controllers.MainController{}) beego.Router("/hello-world", &controllers.MainController{}, "get:HelloSitepoint")}
注意最后一行狼电,它所做的事是當我們嘗試去訪問/hello-world的時候,它會調(diào)用MainController中的HelloSitepoint action弦蹂。保存并等一小下以便完成重新編譯肩碟,之后在瀏覽器中打開http://localhost:8080/hello-world。如果所有的都沒有問題的話凸椿,會顯示出下面的頁面:
0人頂
頂 翻譯的不錯哦!
請求參數(shù)
到目前為止削祈,我們對這個簡單的action所做的都沒有問題。但是脑漫,在一個真實的程序中髓抑,我們要和請求交互,檢查query string 和 POST的數(shù)據(jù)优幸,之后做出相應的反應吨拍。那么,我們怎么在Beego中訪問這些信息呢网杆?
我們先從在query string中取出數(shù)據(jù)開始羹饰。Beego中另一個已經(jīng)預定義好的值是Context Module,它包含了輸入的值碳却,封裝了一個請求队秩。
它為我們提供了以下可以訪問的內(nèi)容:
方法
協(xié)議
user agent
query (Get and Post data)
session 信息以及更多
讓我們將這個程序變得更有趣一些,我們修改路由讓它需要傳入一個id的值昼浦,我們可以在action中取出改值馍资,并將其輸出。在router.go中座柱,將/get路由修改為下面這樣:
beego.Router("/hello-world/:id([0-9]+)", &controllhers.MainController{}, "get:HelloSitepoint")
現(xiàn)在迷帜,我們需要提供一個全部為數(shù)字的GET的值,因為我們在路由的正則中使用了([0-9]+)色洞。保存它,并且嘗試再次加載不帶id的/hello-world冠胯。你有沒有看到錯誤出現(xiàn)火诸?
現(xiàn)在,將它改為/hello-world/213荠察,就應該可以正常工作了置蜀。既然它沒問題了奈搜,讓我們保存請求信息。在Get方法中盯荤,this.TplNames之前添加下面的內(nèi)容:
this.Data["Id"] = this.Ctx.Input.Param(":id")
之后馋吗,在hello-world.tpl 將{{.Id}}添加到現(xiàn)有的模板變量的下面。重新加載頁面將會在Email Name的下面顯示出213秋秤。
中獎啦翻譯于 3 個月 前0人頂
頂 翻譯的不錯哦!
其它翻譯版本(1)
通過方法類型限制Action
Ok,今天的任務差不多完成了宏粤,但在離開前我希望介紹最后一個東西。通常灼卢,你希望將某個action的訪問限制到一個或多個特定的方法绍哎。例如,你只希望通過POST請求訪問一個刪除路由鞋真;你只希望通過GET請求顯示搜索結(jié)果崇堰。
Beego簡化了通過所有方法類型的action訪問涩咖,或?qū)⒛硞€action的訪問限制到一個或幾個方法類型。也是在router.go中特幔,將/hello-world路由做如下改變:
beego.Router("/hello-world/:id([0-9]+)", &controllers.中MainController{}, "get,post:Get")
這樣可以允許GET或POST請求分發(fā)到/hello-world/。試使用curl進行PUT或DELETE訪問盾似,使用如下的示例并查看結(jié)果
PUT requestcurl -X PUT http://localhost:8080/hello-world/213# DELETE requestcurl -X DELETE http://localhost:8080/hello-world/213
--zxp翻譯于 3 個月 前0人頂
頂 翻譯的不錯哦!
結(jié)束語
我希望你們會喜歡這篇對Beego web應用框架的介紹。在第二部分中零院,我們將集成數(shù)據(jù)庫(SQLite3),并加入數(shù)據(jù)模型告抄、表單和驗證撰茎。
在第二部分結(jié)束的時候,我們將有一個很好的應用程序打洼,覆蓋了日常使用的主要功能。
同時Beego和Go是不同于你曾使用過的動態(tài)語言炫惩,利用他們提供的功能是很簡單的阿浓。
不要忘記,這一系列的代碼在Github上筋蓖。你可以隨意的在線瀏覽或者復制,并驗證代碼粘咖。
你想到了什么?這足以去使用Go了嗎翰铡?在評論中分享你的想法唱捣。
鏈接
****http://www.goinggo.net/2013/06/installing-go-gocode-gdb-and-liteide.html
https://groups.google.com/forum/#!topic/golang-nuts/hbNCHMIA05g
http://stackoverflow.com/questions/10105935/how-to-convert-a-int-value-to-string-in-go
https://github.com/astaxie/beego
http://golang.org/pkg/text/template/