其他分享
首页 > 其他分享> > Go Web框架

Go Web框架

作者:互联网

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