Go语言的微服务搭建

Submitted by Lizhe on Wed, 08/23/2017 - 18:02

 

Negroni是一个第三方库,用于在Go内置的net/ http包上构建路由接口

gorilla/mux是一个强大的路由,小巧但是稳定高效,不仅可以支持正则路由还可以按照Method,header,host等信息匹配,可以从我们设定的路由表达式中提取出参数方便上层应用,而且完全兼容http.ServerMux

 

package main

import (
    service "service"
)

func main(){
    port := "8888"
    server := service.NewServer()
    server.Run(":"+port)
}

 

package service

import (
    "net/http"
    "github.com/codegangsta/negroni"
    "github.com/gorilla/mux"
    "github.com/unrolled/render"
)


// NewServer configures and returns a Server.
func NewServer() *negroni.Negroni {

    formatter := render.New(render.Options{
        IndentJSON: true,
    })

    n := negroni.Classic()
    mx := mux.NewRouter()

    initRoutes(mx, formatter)

    n.UseHandler(mx)
    return n
}

func initRoutes(mx *mux.Router, formatter *render.Render) {
    mx.HandleFunc("/test", testHandler(formatter)).Methods("GET")
}

func testHandler(formatter *render.Render) http.HandlerFunc {

    return func(w http.ResponseWriter, req *http.Request) {
        formatter.JSON(w, http.StatusOK, struct{ Test string }{"This is a test"})
    }
}

 

 

464

尝试为response增加一个header信息

func testHandler(formatter *render.Render) http.HandlerFunc {

    return func(w http.ResponseWriter, req *http.Request) {
        w.Header().Add("hello", "hello world")
        formatter.JSON(w, http.StatusOK, struct{ Test string }{"This is a test"})
    }
}

465