iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 28
2
Software Development

啥物碗Golang? 30天就Go系列 第 28

BeeGo

BeGoo說起來跟ruby還有一點點淵源,他的路由設計參考了sinatra,整體設計則參考了python的tornado與flask,都是輕量級框架。在這樣的基礎上結合go語言本身的優點,成為一個適合快速開發輕量級http協定API或Web服務。BeeGo是採用原生的net/http函數包,雖然跟python或ruby比較已經算是極快,但在速度上比不上昨天介紹的gin(因為httprouter的關係)。

熟悉現代網路框架像老媽子一樣把最佳實務都打包在一起給你的工程師可能會非常懷念,Beego提供了許多被寵壞的人視為「理所當然」的支援:

  • MVC
  • REST
  • 靈活自由的路由設計
  • 自動化測試、自動化打包、自動化發佈
  • Session管理
  • 日誌管理
  • ORM
  • 方便的JSON/XML服務
  • 監控CPU、記憶體、QPS(Query per second)使用(等等這已經超過網路框架的預期了)

如果你不喜歡官方選配,Beego也有提供「模塊設計」,讓每個部分像樂高積木一樣可以讓你自由拆解重組,打造為最符合個人需求的樣貌。光是介紹到這裡,我就深深被Beego所吸引。畢竟如果像我從Ruby on Rails跳槽,速度不太會是我在意的地方,反正隨便一個新框架都比我快(XD)。

我之前就有聽過Golang在中國很紅,不過看了採用公司列表才發現,Beego在中國受歡迎的程度還真是遠超乎我的想像:
Beego users
官方網站上都有支援簡中,如果你英文不好的話,或許會覺得BeeGo相當親切(假如你有辦法讀簡體)。

安裝

安裝非常簡單:

go get github.com/astaxie/beego

除此之外,官方建議為了更好的使用bee套件,也可以加裝下面這個:

go get -u github.com/beego/bee

設置GOPATH什麼的就不說了。

Hello World

首先來跑個Hello World看看:

package main

import (
	"github.com/astaxie/beego"
)

type MainController struct {
	beego.Controller
}

func (this *MainController) Get() {
	this.Ctx.WriteString("hello world")
}

func main() {
	beego.Router("/", &MainController{})
	beego.Run("localhost:3000")
}

跟Gin一樣預設Port是8080,我不改成3000就會渾身不對勁。這個範例看似簡單,其實他做了幾件事:

  1. beego基本上只需要引入自己,就可以完成基本的網路服務。當然如果需要其他的功能或支援,可以另外再引入。
  2. 我們定義了一個名為MainController的struct,匿名包含了beego.Controller,這樣MainController就擁有了beego.Controller的所有方法。
  3. 定義RESTful方法,其實原本MainController就包含了GET、POST等所有方法,在這裏我們覆寫他,這樣當MainController執行GET的時候,就會執行我們的方法。
  4. 定義main函數。Go語言跟C一樣需要有程式進入點,所以我們這邊設計了程式的入口。
  5. Router設置路由,定義root根目錄會呼叫我們前面所設計的MainController
  6. 最後是把整個網站服務Run起來,前面提過預設為8080,也可以手動指向其他的port(像我這裡指向3000)。

再下去當然可以講很多很多,可惜今天的篇幅就到這邊了(誰決定的?!),未來如果有機會應該會繼續多玩一些Beego的應用。鐵人賽進入倒數兩天,時間真是過得飛快呢!

Reference


上一篇
Gin
下一篇
Iris
系列文
啥物碗Golang? 30天就Go30

尚未有邦友留言

立即登入留言