Go語言實現靜態伺服器

壹頁書發表於2014-08-25
學習Go語言的一些感受,不一定準確。

假如發生戰爭,JAVA一般都是充當航母戰鬥群的角色。
一旦出動,就是護衛艦、巡洋艦、航母艦載機、預警機、電子戰飛機、潛艇等等
浩浩蕩蕩,殺將過去。
(JVM,數十個JAR包,Tomcat中介軟體,SSH框架,各種配置檔案...天生就是重量級的,專為大規模作戰)

而GO語言更像F35戰鬥轟炸機
單槍匹馬,悄無聲息,投下炸彈然後走人。
專屬轟炸機,空戰也會一點點.
實在搞不定,就叫它大哥F22。
(GO是編譯型語言,不需要依賴,不需要虛擬機器,可以呼叫C程式碼並且它足夠簡單,卻非常全面)

計劃Go語言學習的知識點
1.搭建Http服務
2.連線資料庫
3.本地IO
4.多執行緒
5.網路
6.呼叫本地命令
7.呼叫C語言程式碼

首先,搭建一個靜態的伺服器
我寫程式喜歡使用HTML透過AJAX傳送JSON請求到後端處理。

HttpServer.go
  1. package main

  2. import (
  3.         "flag"
  4.         "io/ioutil"
  5.         "log"
  6.         "net/http"
  7.         "os"
  8.         "strings"
  9. )

  10. var realPath *string

  11. func staticResource(w http.ResponseWriter, r *http.Request) {
  12.         path := r.URL.Path
  13.         request_type := path[strings.LastIndex(path, "."):]
  14.         switch request_type {
  15.         case ".css":
  16.                 w.Header().Set("content-type", "text/css")
  17.         case ".js":
  18.                 w.Header().Set("content-type", "text/javascript")
  19.         default:
  20.         }
  21.         fin, err := os.Open(*realPath + path)
  22.         defer fin.Close()
  23.         if err != nil {
  24.                 log.Fatal("static resource:", err)
  25.         }
  26.         fd, _ := ioutil.ReadAll(fin)
  27.         w.Write(fd)
  28. }

  29. func main() {
  30.         realPath = flag.String("path", "", "static resource path")
  31.         flag.Parse()

  32.         http.HandleFunc("/", staticResource)
  33.         err := http.ListenAndServe(":8080", nil)
  34.         if err != nil {
  35.                 log.Fatal("ListenAndServe:", err)
  36.         }
  37. }

網上看到一個更BT的方法..

  1. package main

  2. import (
  3.         "net/http"
  4. )

  5. func main() {
  6.         http.Handle("/", http.FileServer(http.Dir("/tmp/static/")))
  7.         http.ListenAndServe(":8080", nil)
  8. }

將EasyUI前端框架解壓到 /tmp/static 目錄下


GOPATH下執行 
go run HttpServer.go --path=/tmp/static

檢視網頁,一切正常。


這樣Go語言以不到50行程式碼,編譯之後不到7M的可執行檔案,就實現了一個簡易的靜態伺服器。




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1257557/,如需轉載,請註明出處,否則將追究法律責任。

相關文章