Go语言单控制器和多控制器使用详解_第1页
Go语言单控制器和多控制器使用详解_第2页
Go语言单控制器和多控制器使用详解_第3页
Go语言单控制器和多控制器使用详解_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第Go语言单控制器和多控制器使用详解本文实例为大家分享了Go语言单控制器和多控制器使用的具体代码,供大家参考,具体内容如下

一.单控制器

在Golang的net/http包下有ServeMux实现了Front设计模式的Front窗口,ServeMux负责接收请求并把请求分发给处理器(Handler)http.ServeMux实现了Handler接口

typeHandlerinterface{

ServeHTTP(ResponseWriter,*Request)

typeServeMuxstruct{

mu

sync.RWMutex

m

map[string]muxEntry

hostsbool//whetheranypatternscontainhostnames

func(mux*ServeMux)ServeHTTP(wResponseWriter,r*Request){

ifr.RequestURI=="*"{

ifr.ProtoAtLeast(1,1){

w.Header().Set("Connection","close")

}

w.WriteHeader(StatusBadRequest)

return

}

h,_:=mux.Handler(r)

h.ServeHTTP(w,r)

}

自定义结构体,实现Handler接口后,这个结构体就属于一个处理器,可以处理全部请求

无论在浏览器中输入的资源地址是什么,都可以访问ServeHTTP

packagemain

import"fmt"

import"net/http"

typeMyHandlerstruct{

func(mh*MyHandler)ServeHTTP(reshttp.ResponseWriter,req*http.Request){

fmt.Fprintln(res,"输出内容")

funcmain(){

myhandler:=MyHandler{}

server:=http.Server{

Addr:

":8090",

Handler:myhandler,

server.ListenAndServe()

}

二.多控制器

在实际开发中大部分情况是不应该只有一个控制器的,不同的请求应该交给不同的处理单元.在Golang中支持两种多处理方式

多个处理器(Handler)多个处理函数(HandleFunc)

使用多处理器

使用http.Handle把不同的URL绑定到不同的处理器在浏览器中输入http://localhost:8090/myhandler或http://localhost:8090/myother可以访问两个处理器方法.但是其他URl会出现404(资源未找到)页面

packagemain

import"fmt"

import"net/http"

typeMyHandlerstruct{}

typeMyOtherHandlerstruct{}

func(mh*MyHandler)ServeHTTP(reshttp.ResponseWriter,req*http.Request){

fmt.Fprintln(res,"第一个")

func(mh*MyOtherHandler)ServeHTTP(reshttp.ResponseWriter,req*http.Request){

fmt.Fprintln(res,"第二个")

funcmain(){

myhandler:=MyHandler{}

myother:=MyOtherHandler{}

server:=http.Server{

Addr:"localhost:8090",

http.Handle("/myhandler",myhandler)

http.Handle("/myother",myother)

server.ListenAndServe()

}

多函数方式要比多处理器方式简便.直接把资源路径与函数绑定

packagemain

import"fmt"

import"net/http"

//不需要定义结构体

//函数的参数需要按照ServeHTTP函数参数列表进行定义

funcfirst(reshttp.ResponseWriter,req*http.Request){

fmt.Fprintln(res,"第一个")

funcsecond(reshttp.ResponseWriter,req*http.Request){

fmt.Fprintln(res,"第二个")

funcmain(){

server:=http.Server{

Addr:"localhost:8090",

//注意此处使用HandleFunc函数

http.HandleFunc("/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论