golang進階(四)——路由mux的最佳實務

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

前言

為了讓golang的路由更加清晰,讓路由的代碼可讀性更好,我們採用mux包去實現路由,並且在原有功能上做了精簡

該系列文章所有代碼放在這裡

開始

所需的包github.com/gorilla/mux

我們在啟動http服務時設定一下路由的配置方法

func startHttp() {    if err := http.ListenAndServe(":9090", api.NewAPIMux()); err != nil {        log.Fatal("ListenAndServe: ", err)    }}

配置方法

api包路由的配置方法有兩種,一種是api的配置,另一種的靜態資源的配置(不需要為靜態資源再開一台nginx)

func NewAPIMux() *mux.Router {    r := mux.NewRouter()    s := r.PathPrefix("/api").Subrouter()    initUserApi(s)    r.PathPrefix("/").Handler(http.StripPrefix("/", http.FileServer(http.Dir("web/"))))    return r}

api配置

這裡的api配置,是通過mux的首碼功能,把/api開頭的的請求都認為是api請求,並且引出子路由,這是用mux最大的目的

我們來看看userapi的初始化的方法裡都做什麼,當然最好單獨一個檔案寫userapi的代碼,比如user.go

func initUserApi(r *mux.Router) {    s := r.PathPrefix("/user").Subrouter()    s.HandleFunc("/list", UserListHandler)    s.HandleFunc("/add", UserAddHandler)}func UserListHandler(w http.ResponseWriter, r *http.Request) {    w.Write([]byte("user list"))}func UserAddHandler(w http.ResponseWriter, r *http.Request) {    w.Write([]byte("user add"))}

簡單精鍊,匹配了/api/user下的所有請求,並單獨處理/api/user/list/api/user/add

同理,一樣的product,order都可以這麼寫,代碼會非常清晰,簡單精鍊,

靜態檔案配置

r.PathPrefix("/").Handler(http.StripPrefix("/", http.FileServer(http.Dir("web/"))))

嗯,就這麼簡單的一句,將除了api之外的所有請求匯入到web目錄下,以靜態檔案的方式處理,不再需要啟動nginx,apache之類的去處理

這就是我喜歡golang的地方,更多去操作業務本身,而不是一直敲重複的代碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.