ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Go Web框架

2022-05-25 23:34:44  阅读:124  来源: 互联网

标签:Web string 框架 url Request func error Go ResponseWriter


Web开发中有时可能会遇到框架不能很好的适应开发任务,了解Web框架内部实现才能更好的实现高效率开发。
以python的Django和flask 为例,Django几乎包含了Web开发中所有内容,flask 则非常小巧
RFC 2616
Go语言的官方源码库是如何实现简易Web框架的?
https://pkg.go.dev/net/http@go1.15.5

// 创建一个Foo路由和处理函数
http.Handle("/foo", fooHandler)
// 创建一个bar路由和处理函数
http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) { 
	fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path))
})
// 监听8080端口
log.Fatal(http.ListenAndServe(":8080", nil))

为什么几行代码可以实现

如何快速了解代码

  1. 库函数 : 这个库主要提供了哪些功能
  2. 结构定义: 整个库分为几个核心模块
  3. 结构函数:每个核心模块应该提供什么能力
  4. 库函数 来看下 go语言官方提供的 net/http 库下面有什么函数(window系统)
    go doc net/http | findstr "^func"
    func CanonicalHeaderKey(s string) string
    func DetectContentType(data []byte) string
    func Error(w ResponseWriter, error string, code int)
    func Get(url string) (resp *Response, err error)
    func Handle(pattern string, handler Handler)
    func HandleFunc(pattern string, handler func(ResponseWriter, *Request))
    func Head(url string) (resp *Response, err error)
    func ListenAndServe(addr string, handler Handler) error
    func ListenAndServeTLS(addr, certFile, keyFile string, handler Handler) error
    func MaxBytesReader(w ResponseWriter, r io.ReadCloser, n int64) io.ReadCloser
    func NewRequest(method, url string, body io.Reader) (*Request, error)
    func NewRequestWithContext(ctx context.Context, method, url string, body io.Reader) (*Request, error)
    func NotFound(w ResponseWriter, r *Request)
    func ParseHTTPVersion(vers string) (major, minor int, ok bool)
    func ParseTime(text string) (t time.Time, err error)
    func Post(url, contentType string, body io.Reader) (resp *Response, err error)
    func PostForm(url string, data url.Values) (resp *Response, err error)
    func ProxyFromEnvironment(req *Request) (*url.URL, error)
    func ProxyURL(fixedURL *url.URL) func(*Request) (*url.URL, error)
    func ReadRequest(b *bufio.Reader) (*Request, error)
    func ReadResponse(r *bufio.Reader, req *Request) (*Response, error)
    func Redirect(w ResponseWriter, r *Request, url string, code int)
    func Serve(l net.Listener, handler Handler) error
    func ServeContent(w ResponseWriter, req *Request, name string, modtime time.Time, ...)
    func ServeFile(w ResponseWriter, r *Request, name string)
    func ServeTLS(l net.Listener, handler Handler, certFile, keyFile string) error
    func SetCookie(w ResponseWriter, cookie *Cookie)
    func StatusText(code int) string
    

根据Go语言函数的命名规范可以分析

  1. 服务端提供HTTP服务的函数,名字一般包含Serve:Serve、ServeFile、ListenAndServe 等。
  2. 为客户端提供调用HTTP服务的类库,以HTTP的methods 同名:Get,Post,Head等。
  3. 提供代理中转的一些函数:ProxyURL, ProxyFromEnvironemnt等。

标签:Web,string,框架,url,Request,func,error,Go,ResponseWriter
来源: https://www.cnblogs.com/stormliu/p/16310921.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有