最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言單控制器和多控制器使用詳解

 更新時(shí)間:2022年07月26日 09:09:58   作者:書香水墨  
這篇文章主要為大家詳細(xì)介紹了Go語言單控制器和多控制器的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Go語言單控制器和多控制器使用的具體代碼,供大家參考,具體內(nèi)容如下

一. 單控制器

  • 在Golang的net/http包下有ServeMux實(shí)現(xiàn)了Front設(shè)計(jì)模式的Front窗口,ServeMux負(fù)責(zé)接收請求并把請求分發(fā)給處理器(Handler)
  • http.ServeMux實(shí)現(xiàn)了Handler接口
type Handler interface {
?? ?ServeHTTP(ResponseWriter, *Request)
}
type ServeMux struct {
?? ?mu ? ?sync.RWMutex
?? ?m ? ? map[string]muxEntry
?? ?hosts bool // whether any patterns contain hostnames
}
func (mux *ServeMux) ServeHTTP(w ResponseWriter, r *Request) {
?? ?if r.RequestURI == "*" {
?? ??? ?if r.ProtoAtLeast(1, 1) {
?? ??? ??? ?w.Header().Set("Connection", "close")
?? ??? ?}
?? ??? ?w.WriteHeader(StatusBadRequest)
?? ??? ?return
?? ?}
?? ?h, _ := mux.Handler(r)
?? ?h.ServeHTTP(w, r)
}

自定義結(jié)構(gòu)體,實(shí)現(xiàn)Handler接口后,這個(gè)結(jié)構(gòu)體就屬于一個(gè)處理器,可以處理全部請求

  • 無論在瀏覽器中輸入的資源地址是什么,都可以訪問ServeHTTP
package main

import "fmt"
import "net/http"

type MyHandler struct {
}

func (mh *MyHandler) ServeHTTP(res http.ResponseWriter, req *http.Request) {
? ?fmt.Fprintln(res,"輸出內(nèi)容")
}

func main() {
? ?myhandler := MyHandler{}
? ?server := http.Server{
? ? ? Addr: ? ?"127.0.0.1:8090",
? ? ? Handler: &myhandler,
? ?}
? ?server.ListenAndServe()
}

二.多控制器

在實(shí)際開發(fā)中大部分情況是不應(yīng)該只有一個(gè)控制器的,不同的請求應(yīng)該交給不同的處理單元.在Golang中支持兩種多處理方式

  • 多個(gè)處理器(Handler)
  • 多個(gè)處理函數(shù)(HandleFunc)

使用多處理器

  • 使用http.Handle把不同的URL綁定到不同的處理器
  • 在瀏覽器中輸入http://localhost:8090/myhandler或http://localhost:8090/myother可以訪問兩個(gè)處理器方法.但是其他URl會出現(xiàn)404(資源未找到)頁面
package main

import "fmt"
import "net/http"

type MyHandler struct{}
type MyOtherHandler struct{}

func (mh *MyHandler) ServeHTTP(res http.ResponseWriter, req *http.Request) {
? ?fmt.Fprintln(res, "第一個(gè)")
}
func (mh *MyOtherHandler) ServeHTTP(res http.ResponseWriter, req *http.Request) {
? ?fmt.Fprintln(res, "第二個(gè)")
}

func main() {
? ?myhandler := MyHandler{}
? ?myother := MyOtherHandler{}
? ?server := http.Server{
? ? ? Addr: "localhost:8090",
? ?}
? ?http.Handle("/myhandler", &myhandler)
? ?http.Handle("/myother", &myother)
? ?server.ListenAndServe()
}

多函數(shù)方式要比多處理器方式簡便.直接把資源路徑與函數(shù)綁定

package main

import "fmt"
import "net/http"

//不需要定義結(jié)構(gòu)體
//函數(shù)的參數(shù)需要按照ServeHTTP函數(shù)參數(shù)列表進(jìn)行定義
func first(res http.ResponseWriter, req *http.Request) {
? ?fmt.Fprintln(res, "第一個(gè)")
}
func second(res http.ResponseWriter, req *http.Request) {
? ?fmt.Fprintln(res, "第二個(gè)")
}

func main() {
? ?server := http.Server{
? ? ? Addr: "localhost:8090",
? ?}
? ?//注意此處使用HandleFunc函數(shù)
? ?http.HandleFunc("/first", first)
? ?http.HandleFunc("/second", second)
? ?server.ListenAndServe()
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Go結(jié)構(gòu)體SliceHeader及StringHeader作用詳解

    Go結(jié)構(gòu)體SliceHeader及StringHeader作用詳解

    這篇文章主要為大家介紹了Go結(jié)構(gòu)體SliceHeader及StringHeader作用的功能及面試官愛問的實(shí)際意義詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • golang?recover函數(shù)使用中的一些坑解析

    golang?recover函數(shù)使用中的一些坑解析

    這篇文章主要為大家介紹了golang?recover函數(shù)使用中的一些坑解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Go中并發(fā)控制的實(shí)現(xiàn)方式總結(jié)

    Go中并發(fā)控制的實(shí)現(xiàn)方式總結(jié)

    在Go實(shí)際開發(fā)中,并發(fā)安全是老生常談的事情,在并發(fā)下,goroutine之間的存在數(shù)據(jù)資源等方面的競爭,為了保證數(shù)據(jù)一致性、防止死鎖等問題的出現(xiàn),在并發(fā)中需要使用一些方式來實(shí)現(xiàn)并發(fā)控制,本文給大家總結(jié)了幾種實(shí)現(xiàn)方式,需要的朋友可以參考下
    2023-12-12
  • GoLang反射機(jī)制深入講解

    GoLang反射機(jī)制深入講解

    這篇文章主要介紹了GoLang反射機(jī)制,反射是一種讓程序可以在運(yùn)行時(shí)( runtime )檢查其數(shù)據(jù)結(jié)構(gòu)的能力,通過反射可以獲取豐富的類型信息
    2022-12-12
  • Go語言用map實(shí)現(xiàn)堆棧功能的方法

    Go語言用map實(shí)現(xiàn)堆棧功能的方法

    這篇文章主要介紹了Go語言用map實(shí)現(xiàn)堆棧功能的方法,實(shí)例分析了Go語言使用map操作堆棧的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • golang通過反射手動(dòng)實(shí)現(xiàn)json序列化的方法

    golang通過反射手動(dòng)實(shí)現(xiàn)json序列化的方法

    在 Go 語言中,JSON 序列化和反序列化通常通過標(biāo)準(zhǔn)庫 encoding/json 來實(shí)現(xiàn),本文給大家介紹golang  通過反射手動(dòng)實(shí)現(xiàn)json序列化的方法,感興趣的朋友一起看看吧
    2024-12-12
  • 10個(gè)可以優(yōu)化代碼的Go語言技巧分享

    10個(gè)可以優(yōu)化代碼的Go語言技巧分享

    這篇文章主要為大家詳細(xì)介紹了10個(gè)可以優(yōu)化代碼的Go語言技巧,從而讓我們的代碼更加優(yōu)雅,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考下
    2024-01-01
  • minikube部署Go應(yīng)用小結(jié)

    minikube部署Go應(yīng)用小結(jié)

    本文詳細(xì)介紹了在VMCentos7環(huán)境下使用Minikube和Kubernetes部署Go應(yīng)用的步驟,包括安裝Minikube和Kubectl、配置Docker鏡像源和私有倉庫、部署項(xiàng)目以及解決啟動(dòng)過程中的常見問題,感興趣的朋友一起看看吧
    2025-03-03
  • Golang如何調(diào)用Python代碼詳解

    Golang如何調(diào)用Python代碼詳解

    這篇文章主要給大家介紹了關(guān)于Golang如何調(diào)用Python代碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • 為什么不建議在go項(xiàng)目中使用init()

    為什么不建議在go項(xiàng)目中使用init()

    這篇文章主要介紹了為什么不建議在go項(xiàng)目中使用init(),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04

最新評論

栾城县| 广安市| 明水县| 汝南县| 台东市| 绥化市| 修武县| 米林县| 墨脱县| 开阳县| 汝南县| 邵武市| 凤城市| 舒城县| 霍山县| 晋州市| 扎囊县| 信阳市| 漠河县| 韩城市| 新巴尔虎右旗| 西畴县| 临武县| 石门县| 东乌珠穆沁旗| 新竹县| 福泉市| 宜良县| 兴安盟| 手机| 开阳县| 霸州市| 德钦县| 阿拉善盟| 万盛区| 英超| 上犹县| 大悟县| 克拉玛依市| 尉犁县| 绥化市|