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))
为什么几行代码可以实现
如何快速了解代码
- 库函数 : 这个库主要提供了哪些功能
- 结构定义: 整个库分为几个核心模块
- 结构函数:每个核心模块应该提供什么能力
- 库函数 来看下 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语言函数的命名规范可以分析
- 为服务端提供HTTP服务的函数,名字一般包含Serve:Serve、ServeFile、ListenAndServe 等。
- 为客户端提供调用HTTP服务的类库,以HTTP的methods 同名:Get,Post,Head等。
- 提供代理中转的一些函数:ProxyURL, ProxyFromEnvironemnt等。
标签:Web,string,框架,url,Request,func,error,Go,ResponseWriter 来源: https://www.cnblogs.com/stormliu/p/16310921.html