1. 程式人生 > >Go Web 實戰之HTTP的封裝

Go Web 實戰之HTTP的封裝

Go web

      從今天起 ,本菜準備跟著無聞學習一下Beego服務。Beego還是比較好的一個web框架。其實很多東西都可以照著官網去學習。

按照官網,首先實現一個最最簡單的HTTP伺服器

 go get github.com/astaxie/beego

好了,接著。建立一個main.go (其實更詳細的過程可以參見beego官網)

package main

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

type HomeController struct {
	beego.Controller
}

func (self *HomeController) Get() {
	self.Ctx.WriteString("Hello,World !! ")
}

func main() {
	beego.Router("/",&HomeController{})
	beego.Run()
}

    這段程式碼十分的簡單。初始化一個Controller,過載一下Get方法。Get方法呢,就去寫進去一個字串。而main函式是註冊一個路由。將對 "/" 的訪問,全部去匯入到 HomeController 中,再beego.Run()

看看這個被過載的beego.controller


下面具體來介紹http伺服器的底層實現。

version1

package main

import (
	"io"
	"log"
	"net/http"
)

func main() {
	//設定路由
	http.HandleFunc("/",handler)
	err:=http.ListenAndServe(":80",nil)
	if err!=nil{
		log.Fatal(err)
	}
}

func handler(w http.ResponseWriter,r *http.Request){
	io.WriteString(w,"Hello world,this is version 1")
}

Version2
package main

import (
	"io"
	"log"
	"net/http"
)

func main() {
	mux := http.NewServeMux()
	mux.Handle("/",&myHandler{})

	err:=http.ListenAndServe(":80",mux)
	if err != nil {
		log.Fatal(err)
	}
}

type myHandler struct {

}

func (*myHandler) ServeHTTP(w http.ResponseWriter,r *http.Request){
	io.WriteString(w,"URL:"+r.URL.String())
}