• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Go語言搭建網(wǎng)站解析

      2016-01-05 12:48:59林路智
      電腦知識與技術(shù) 2015年29期

      摘要:無處不網(wǎng)絡(luò),無處不聯(lián)網(wǎng)是現(xiàn)在社會的一個(gè)重要特點(diǎn),特別是從Web2.0即將步入Web3.0時(shí)代加上手機(jī)的4G網(wǎng)絡(luò),使得網(wǎng)站如雨后春筍一般快速的增加成長,如何才能快速建立一個(gè)屬于自己的小網(wǎng)站是不少人的熱切渴望。Go語言是Google在2009年11月正式推出的新型輕量級系統(tǒng)性程序語言,但在網(wǎng)絡(luò)后臺上卻有著獨(dú)特的優(yōu)勢,借助它的新穎和市場的需求,該文介紹一下用Go語言搭建網(wǎng)站的技術(shù)方法。

      關(guān)鍵詞:Go語言;MVC;Go Web

      中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2015)29-0060-02

      1 MVC模式

      MVC架構(gòu)模式(Model-View-Controller)是軟件工程中的一種比較流行的軟件架構(gòu)模式之一,將整個(gè)軟件系統(tǒng)分為三個(gè)組成部分:Model、View和Controller。MVC模式最早是在1978年由Trygve Reenskaug提出,主要是以實(shí)現(xiàn)一種程序設(shè)計(jì)的動態(tài)性,使后續(xù)對程序易于修改和擴(kuò)展簡化,并且使程序模型的高內(nèi)聚低耦合成為可能。

      (在下面的程序中 _ 往往表示了error 檢測處理,在此暫?。?/p>

      2 Routing(路由)

      路由的指的是把信息通過互聯(lián)網(wǎng)絡(luò)從源地址傳輸?shù)侥康牡刂返幕顒?。路由發(fā)生在OSI網(wǎng)絡(luò)參考模型中的第三層網(wǎng)絡(luò)層。路由的存在看似自是做了監(jiān)聽端口的功能,但其實(shí)還肩負(fù)起了解析配置文件,預(yù)編譯模板,開啟文檔,啟動管理模塊等功能。而應(yīng)對不同的網(wǎng)站的需求,路由設(shè)計(jì)也會有著很大的區(qū)別,可以分為動態(tài)路由,靜態(tài)路由或者可以按方式分為固定路由、正則路由、自由路由。以下只簡單的講一下基礎(chǔ)靜態(tài)路由,主要用到net/http包。

      例子(固定路由):

      Func main() {

      http.Handle("/view/", http.StripPrefix("/view/", http.FileServer(http.Dir("view"))))

      //加載view文件進(jìn)行預(yù)編譯

      http.HandleFunc("/", controllers.Head)

      //訪問轉(zhuǎn)到controller中的Head程序

      err := http.ListenAndServe(":8080", nil) //監(jiān)聽8080端口

      if err != nil {

      log.Fatal("ListenAndServe: ", err)

      } //error診斷記錄

      }

      3 Model(模型)

      程序員編寫相應(yīng)的功能程序(如算法實(shí)現(xiàn)等)、數(shù)據(jù)庫進(jìn)行數(shù)據(jù)庫設(shè)計(jì)和數(shù)據(jù)管理(當(dāng)網(wǎng)站足夠簡單且功能集成時(shí),可以考慮省去Model,直接在controller中實(shí)現(xiàn)降低復(fù)雜度)。算法類在此暫不講,下面只以MariaDB(mysql開源分支)為例:

      鏈接管理數(shù)據(jù)庫用到庫包”database/sql”,也可以考慮使用第三方包github.com/go-sql-driver/mysql進(jìn)行管理。

      鏈接數(shù)據(jù)庫代碼:

      db, _ := sql.Open("mysql", "root:password@/DatabaseaseName")

      defer db.Close()

      還有的就是利用標(biāo)準(zhǔn)格式加mysql命令進(jìn)行對數(shù)據(jù)庫管理,如:

      err := db.QueryRow("select Age from table where Name = ?", name).Scan(&Age)

      //獲取table表中name的Age值 (只能運(yùn)用在確定有此表元素情況下)

      使用詳情可參考https://golang.org/pkg/database/sql/

      4 View(視圖)

      存放界面設(shè)計(jì)人員進(jìn)行的圖形界面設(shè)計(jì)如Html文件,主要是要求對html或xml有一定的基礎(chǔ),亦可稱為前端設(shè)計(jì)。在設(shè)置網(wǎng)頁時(shí),應(yīng)該注重高可用即復(fù)用性,降低不必要的耦合。這用到了"html/template"包。

      加載多個(gè)View文件(相應(yīng)的安全性要比template.New().Parse()降低了很多):

      t, _ := template.ParseFiles("view/Global.html", "view/footer.html")

      文件輸出: t.ExecuteTemplate(w, "filename", message)

      注意在組合型網(wǎng)頁文件中,要在{{difine "filename"}}......{{end}}內(nèi)寫,在輸出文件時(shí)填上定義的filename才可正確顯示并對其數(shù)據(jù)填充,填充信息要對應(yīng)到相應(yīng)地點(diǎn)的{{.}}中,且參數(shù)名首字母要大寫。如:

      {{define "filename"}}

      <Golang

      {{.Message}}

      //range 為循環(huán)語句, 以end 結(jié)束循環(huán)

      {{range .}}

      {{.Name}}
      {{end}}

      {{end}}

      其中message如果有兩個(gè)或以上的參數(shù)一般以數(shù)組結(jié)構(gòu)體的形式進(jìn)行循環(huán)輸出

      Message := make([]StructName, int)

      5 Controller(控制器)

      控制器里的程序主要負(fù)責(zé)轉(zhuǎn)發(fā)請求和對請求進(jìn)行處理。Controller 可以用來根據(jù)用戶的需求選擇連接不同的 Model 和 適當(dāng)?shù)牡腣iew 去完成用戶的需求將處理結(jié)果顯示給用戶,也可以構(gòu)造應(yīng)用程序,提高了應(yīng)用程序的靈活性和可配置性。

      最基礎(chǔ)的控制器如下形式:

      func ControllerName(w http.ResponseWriter, r *http.Request) {

      //結(jié)合Model和View直接寫要運(yùn)行的程序代碼

      }

      復(fù)雜點(diǎn)的創(chuàng)建Controller接口interface和相應(yīng)的結(jié)構(gòu)體Struct,如下:

      type ControllerInterfaceName interface {

      Get() //method = "GET" 處理

      Post() //method = "POST" 處理

      Delete() //method = "DELETE" 處理

      ......

      }

      6 Cookies Or Sessions(狀態(tài))

      因?yàn)榫W(wǎng)頁是無狀態(tài)的單次鏈接請求,所以每次請求是必須添加訪問標(biāo)識符對其進(jìn)行用戶識別。而Cookie和Session的作用就是對用戶的登陸狀態(tài)進(jìn)行標(biāo)記每次請求都會添加特有的標(biāo)識符,但不同的是Cookie主要是針對客戶端(瀏覽器)而Session則是在服務(wù)器中進(jìn)行記錄,完善了在沒有Cookie的情況下的使用,也更為的安全。

      此處只講一下簡單的Cookie使用,而Cookie是直接引用了庫中的net/http包,設(shè)置參數(shù)如下:

      type Cookie struct {

      Name string

      Value string

      Path string // optional

      Domain string // 域名

      Expires time.Time // Cookie存在時(shí)間

      // MaxAge=0 意為不設(shè)Cookie

      // MaxAge<0 意為刪除當(dāng)前Cookie 登出時(shí)用如:-1

      // MaxAge>0 意為添加一個(gè)Cookie 登陸時(shí)用亦可不用

      MaxAge int

      } //詳情: https://golang.org/pkg/net/http/#Cookie

      讀取Cookie中的信息可用以下兩種方法之一:

      1) Username, _ := r.Cookie(“user_name”)

      2) for _, cookie := range r.Cookie() {

      Username = cookie.Name

      } //先定義Username

      7 Log and Security(日志和安全性)

      直譯就是日常行為記錄的文件。這對后期恢復(fù)和維護(hù)至關(guān)重要,能避免很多錯(cuò)誤的發(fā)生和經(jīng)濟(jì)的損失。庫中有個(gè)log包能對系統(tǒng)進(jìn)行簡易的日志處理,可以將error等的相關(guān)信息記錄下來和個(gè)人設(shè)定信息輸出。

      安全性也是任何一個(gè)軟件系統(tǒng)的重要組成部分,像URL的路由安全檢測,數(shù)據(jù)庫中重要信息的加密等。采用普通的加密方法可以參考庫中的encoding包或混合hash等包來加大加密的復(fù)雜度使之難以破解。

      8 結(jié)束語

      在這大數(shù)據(jù)時(shí)代,數(shù)據(jù)流的研究已成了各大企業(yè)公司的重要發(fā)展方向之一,而面對龐大的數(shù)據(jù)和用戶群,不單單是需要對基礎(chǔ)知識的理解,更需要對最新前沿的思想和工具保持一定的了解,雖然這只是初用Go語言和開發(fā)網(wǎng)站所邁向的第一步,但相信前進(jìn)的路將是寬闊而沒有盡頭的。

      參考文獻(xiàn):

      [1] Ivo Balbaert.The way to Go[M].iUniverse,2012.

      [2] 謝孟軍.Go Web 編程[M].北京:電子工業(yè)出版社,2013.

      [3] Beego Framework[EB/OL].http://beego.me/.

      [4] wikipedia[EB/OL].https://www.wikipedia.org.

      [5] Golang[EB/OL].https://golang.org/.

      惠州市| 彰化县| 内丘县| 浠水县| 嘉荫县| 伊金霍洛旗| 扬中市| 旬阳县| 新乡市| 万荣县| 任丘市| 吉安县| 马山县| 宁乡县| 通州区| 宜黄县| 奇台县| 荣成市| 革吉县| 安达市| 永丰县| 怀宁县| 襄汾县| 辽阳县| 五大连池市| 绩溪县| 师宗县| 普陀区| 桐庐县| 盐津县| 汕头市| 鄂托克前旗| 濮阳县| 吉木萨尔县| 三门县| 鹤壁市| 建始县| 永康市| 巢湖市| 浦城县| 化州市|