首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Go语言restful

Go语言restful

原创
作者头像
IT工作者
发布2022-03-31 11:44:52
发布2022-03-31 11:44:52
4610
举报
文章被收录于专栏:程序技术知识程序技术知识

一.Restful风格请求

在目前所学内容中每个请求都需要绑定一个HandlerFunc,而在实际项目中会有很多URL,且可能出现满足特定规律的URL,例如: /sxt/it和/sxt/baizhan都是以/sxt/开头.且如果这两个URL里面代码也差不多时,写两个Func就属于代码冗余了.

可以使用restful风格把满足特定格式url和功能类似的代码提入到一个func中实现代码复用.

二.Go语言的多路复用器

在http包中提供了ServeMux实现多路复用器,它会对URL进行解析,然后重定向到正确的处理器上

ServeMux是一个结构体,里面存放了map和读写锁

代码语言:javascript
复制
type ServeMux struct {
    mu    sync.RWMutex
    m     map[string]muxEntry
    hosts bool // whether any patterns contain hostnames
}

在Go语言中有提供了ServeMux的对象DefaultServeMux,

var DefaultServeMux = &defaultServeMux

var defaultServeMux ServeMux

而平时使用的http.Server不指定Handler属性时默认就是DefaultServeMux

三.使用第三方实现Restful风格

可以使用命令,从github上下载第三方库,下载后放入到%GOROOT%/src/github.com中

go get github.com/gorilla/mux

使用mux包的Router实现restful风格

代码语言:javascript
复制
package main

import (
    "net/http"
    "fmt"
    "github.com/gorilla/mux"
)

func hello(w http.ResponseWriter, r *http.Request) {
    vars := mux.Vars(r)
    fmt.Fprintln(w, "dayinle", vars["key"])
}

func abc(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "abc")
}
func main() {
    r := mux.NewRouter()
    r.HandleFunc("/hello/{key}", hello)
    r.HandleFunc("/abc", abc)
    http.ListenAndServe(":8090", r)
    //s:=http.Server{Addr:":8090",Handler:r}
    //s.ListenAndServe()
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档