Beego專案組織結構
conf
conf:專案配置檔案所在的目錄,專案中有一些全域性的配置都可以放在此目錄下。預設的app.conf檔案中預設指定了三個配置:
// 1)appname = BeegoDemo2: 指定專案名稱。
// 2)httpport = 8080: 指定專案服務監聽埠。
// 3)runmode = dev: 指定執行模式。
Controllers
該目錄是存放控制器檔案的目錄,所謂控制器就是控制應用呼叫哪些業務邏輯,由controllers處理完http請求以後,並負責返回給前端呼叫者。
models
models層可以解釋為實體層或者資料層,在models層中實現和使用者和業務資料的處理,主要和資料庫表相關的一些操作會在這一目錄中實現,然後將執行後的結果資料返回給controller層。比如向資料庫中插入新資料,刪除資料庫表資料,修改某一條資料,從資料庫中查詢業務資料等都是在models層實現。
routers
該層是路由層。所謂路由就是分發的意思,當前端瀏覽器進行一個http請求達到後臺web專案時,必須要讓程式能夠根據瀏覽器的請求url進行不同的業務處理,從接收到前端請求到判斷執行具體的業務邏輯的過程的工作,就由routers來實現。
static
在static目錄下,存放的是web專案的靜態資原始檔,主要有:css檔案,img,js,html這幾類檔案。html中會存放應用的靜態頁面檔案。
views
views中存放的就是應用中存放html模版頁面的目錄。所謂模版,就是頁面框架和佈局是已經使用html寫好了的,只需要在進行訪問和展示時,將獲取到的資料動態填充到頁面中,能夠提高渲染效率。因此,模版檔案是非常常見的一種方式。
綜上,這個整個的專案架構就是MVC的執行模式。常見的架構模式大家應該熟悉比如:MVC,MVP,MVVM等架構。這裡我們採用MVC
路由設定
基礎路由
Get請求就會對應到Get方法,Post就會對應到Post方法,Delete就會對應到Delete方法,Header方法就會對應Header方法。
package routers
import (
"github.com/astaxie/beego"
"github.com/astaxie/beego/context"
)
/**
* 基礎路由
* beego框架提供了常見的http的請求型別方法的路由方案,比如: get,post,head,options,delete等方法
*/
func init() {
beego.Get("/get", func(context *context.Context) {
beego.Info("基礎路由中的get請求")
context.Output.Body([]byte("基礎路由中的get請求"))
})
beego.Get("/getUserInfo", func(context *context.Context) {
beego.Info("獲取使用者資訊")
context.Output.Body([]byte("獲取使用者資訊"))
})
beego.Post("/post", func(this *context.Context) {
beego.Info("基礎路由中的post請求")
this.Output.Body([]byte("基礎路由的post請求"))
})
}
固定路由
諸如以下此種程式碼形式:
// beego.Router("/",controller);
// Get請求就會對應到Get方法,Post就會對應到Post方法,Delete就會對應到Delete方法,Header方法就會對應Header方法。
正則路由
正則路由是指可以在進行固定路由的基礎上,支援匹配一定格式的正規表示式。比如:id,:username,自定義正則,file的路徑和字尾切換以及全匹配等操作。
自定義路由
上面兩種路由都是預設的根據請求的型別,Get就執行Get方法,Post執行Post方法,比較侷限。因為在開發的時候大部分都是使用固定匹配想要直接執行對應的邏輯控制方法,因此beego提供給我們了可以自定義的自定義路由配置。方式如下:
// beego.Router("/",&IndexController{},"")
Model層
在Web開發過程中,開發者運算元據,儲存資料最常用的就是資料庫操作,資料庫操作是獨立的一個模組,這個在後面具體的專案中實現。
View編寫
在實際的開發過程中,要求大家需要掌握html,js語法以及簡單的css語法要能看懂,能夠時間簡單的使用。更加複雜的前端頁面或者靜態頁面,需要和前端開發人員進行對接。開發重心是在後臺服務端,因此,只需要學會使用和呼叫除錯即可。
靜態檔案的設定
在goweb專案中,上面說過是有一些靜態資原始檔的,如果使用者要訪問靜態資原始檔,我們應該也是能夠訪問的,這需要在我們的專案中進行靜態資源設定。
設定方式為:
// beego.SetStaticPath("/down1","download1")
// 這裡的download目錄是指的非goweb專案的static目錄下目錄,而是開發者重新新建的另外的目錄。
配置資料庫
mysql資料庫安裝
請看我寫的專門部署mysql部落格
https://www.cnblogs.com/you-men/p/12838133.html
配置資料庫驅動
資料庫程式設計屬於beego中的Models層,也稱為ORM模組
在beego中,目前支援三種資料庫驅動,分別是:
// MySQL: github.com/go-sql-driver/mysql
// PostgreSQL:github.com/lib/pq
// Sqlite3:github.com/mattn/go-sqlite3
go get github.com/go-sql-driver/mysql
beego中的ORM所具備的幾個特性
// 1. 支援G語言的所有型別儲存
// 2. CRUD操作簡單
// 3. 自動Join關聯表
// 4. 允許直接使用SQL查詢
beego專案中使用mysql
匯入對應的資料庫驅動
import _ "github.com/go-sql-driver/mysql"
註冊驅動,連線資料庫
orm.RegisterDriver("mysql",orm.DRMySQL)
orm.RegisterDataBase(aliasName,driverName,dbConn)
連線資料庫程式碼
package models
import (
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
"BlogProject/MysqlDemo/util"
//切記:匯入驅動包
_ "github.com/go-sql-driver/mysql"
)
func init() {
driverName := beego.AppConfig.String("driverName")
//註冊資料庫驅動
orm.RegisterDriver(driverName, orm.DRMySQL)
//資料庫連線
user := beego.AppConfig.String("mysqluser")
pwd := beego.AppConfig.String("mysqlpwd")
host := beego.AppConfig.String("host")
port := beego.AppConfig.String("port")
dbname := beego.AppConfig.String("dbname")
//dbConn := "root:yu271400@tcp(127.0.0.1:3306)/cmsproject?charset=utf8"
dbConn := user + ":" + pwd + "@tcp(" + host + ":" + port + ")/" + dbname + "?charset=utf8"
err := orm.RegisterDataBase("default", driverName, dbConn)
if err != nil {
util.LogError("連線資料庫出錯")
return
}
util.LogInfo("連線資料庫成功")
}