go语言网络编程 - doc.haohtml.comdoc.haohtml.com/golang/go%d3%ef%d1%d4%cd%f8%c2%e7... ·...

19
Go语言网络编程 why404@七牛云存储 2012/07/21 1 12年7月21日星期六

Upload: truongquynh

Post on 08-Mar-2018

355 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Go语言网络编程 - doc.haohtml.comdoc.haohtml.com/golang/Go%d3%ef%d1%d4%cd%f8%c2%e7... · Go语言网络编程 why404@七牛云存储 2012/07/21 12年7月21日星期六 1

Go语言网络编程why404@七牛云存储

2012/07/21

112年7月21日星期六

Page 2: Go语言网络编程 - doc.haohtml.comdoc.haohtml.com/golang/Go%d3%ef%d1%d4%cd%f8%c2%e7... · Go语言网络编程 why404@七牛云存储 2012/07/21 12年7月21日星期六 1

Overview

Socket

HTTP

RPC

JSON

JSON-RPC

Web Devlopment

212年7月21日星期六

Page 3: Go语言网络编程 - doc.haohtml.comdoc.haohtml.com/golang/Go%d3%ef%d1%d4%cd%f8%c2%e7... · Go语言网络编程 why404@七牛云存储 2012/07/21 12年7月21日星期六 1

Socket 编程

312年7月21日星期六

Page 4: Go语言网络编程 - doc.haohtml.comdoc.haohtml.com/golang/Go%d3%ef%d1%d4%cd%f8%c2%e7... · Go语言网络编程 why404@七牛云存储 2012/07/21 12年7月21日星期六 1

HTTP 编程

HTTP Client

HTTP Server

412年7月21日星期六

Page 5: Go语言网络编程 - doc.haohtml.comdoc.haohtml.com/golang/Go%d3%ef%d1%d4%cd%f8%c2%e7... · Go语言网络编程 why404@七牛云存储 2012/07/21 12年7月21日星期六 1

HTTP Client Methods

http.Get

http.Post

http.PostForm

http.Head

http.Do

512年7月21日星期六

Page 6: Go语言网络编程 - doc.haohtml.comdoc.haohtml.com/golang/Go%d3%ef%d1%d4%cd%f8%c2%e7... · Go语言网络编程 why404@七牛云存储 2012/07/21 12年7月21日星期六 1

http.Get

func (c *Client) Get(url string) (r *Response, err error)

resp, err := http.Get("http://example.com/")if err != nil { // handle error … return}defer resp.Body.close()io.Copy(os.Stdout, resp.Body)

612年7月21日星期六

Page 7: Go语言网络编程 - doc.haohtml.comdoc.haohtml.com/golang/Go%d3%ef%d1%d4%cd%f8%c2%e7... · Go语言网络编程 why404@七牛云存储 2012/07/21 12年7月21日星期六 1

http.Postfunc (c *Client) Post(url string, bodyType string, body io.Reader) (r *Response, err error)

resp, err := http.Post("http://example.com/upload", "image/jpeg", &imageDataBuf)if err != nil { // handle error … return}if resp.StatusCode != http.StatusOK { // handle error … return}// …

712年7月21日星期六

Page 8: Go语言网络编程 - doc.haohtml.comdoc.haohtml.com/golang/Go%d3%ef%d1%d4%cd%f8%c2%e7... · Go语言网络编程 why404@七牛云存储 2012/07/21 12年7月21日星期六 1

http.PostForm

func (c *Client) PostForm(url string, data url.Values) (r *Response, err error)

resp, err := http.PostForm("http://example.com/posts",url.Values{"title": {"article title"}, "content": {"article body"}})if err != nil { // handle error … return}// …

812年7月21日星期六

Page 9: Go语言网络编程 - doc.haohtml.comdoc.haohtml.com/golang/Go%d3%ef%d1%d4%cd%f8%c2%e7... · Go语言网络编程 why404@七牛云存储 2012/07/21 12年7月21日星期六 1

http.Head

func (c *Client) Head(url string) (r *Response, err error)

resp, err := http.Head("http://example.com/")

912年7月21日星期六

Page 10: Go语言网络编程 - doc.haohtml.comdoc.haohtml.com/golang/Go%d3%ef%d1%d4%cd%f8%c2%e7... · Go语言网络编程 why404@七牛云存储 2012/07/21 12年7月21日星期六 1

http.Do

func (c *Client) Do(req *Request) (resp *Response, err error)

req, err := http.NewRequest("GET", "http://example.com", nil)// ...req.Header.Add("User-Agent", "Gobook Custom User-Agent")resp, err := http.Do(req)// ...

1012年7月21日星期六

Page 11: Go语言网络编程 - doc.haohtml.comdoc.haohtml.com/golang/Go%d3%ef%d1%d4%cd%f8%c2%e7... · Go语言网络编程 why404@七牛云存储 2012/07/21 12年7月21日星期六 1

HTTP Server

处理 http 请求

自定义 http.Server

1112年7月21日星期六

Page 12: Go语言网络编程 - doc.haohtml.comdoc.haohtml.com/golang/Go%d3%ef%d1%d4%cd%f8%c2%e7... · Go语言网络编程 why404@七牛云存储 2012/07/21 12年7月21日星期六 1

处理 http 请求func ListenAndServe(addr string, handler Handler) error

http.Handle("/foo", fooHandler)http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path))})log.Fatal(http.ListenAndServe(":8080", nil))

// http.Handle 或 http.HandleFunc 缺省注入 http.DefaultServeMux

1212年7月21日星期六

Page 13: Go语言网络编程 - doc.haohtml.comdoc.haohtml.com/golang/Go%d3%ef%d1%d4%cd%f8%c2%e7... · Go语言网络编程 why404@七牛云存储 2012/07/21 12年7月21日星期六 1

自定义 http.Servers := &http.Server{ Addr: ":8080", Handler: myHandler, ReadTimeout: 10 * time.Second, WriteTimeout: 10 * time.Second, MaxHeaderBytes: 1 << 20,}log.Fatal(s.ListenAndServe())

1312年7月21日星期六

Page 14: Go语言网络编程 - doc.haohtml.comdoc.haohtml.com/golang/Go%d3%ef%d1%d4%cd%f8%c2%e7... · Go语言网络编程 why404@七牛云存储 2012/07/21 12年7月21日星期六 1

HTTP 高级话题

1412年7月21日星期六

Page 15: Go语言网络编程 - doc.haohtml.comdoc.haohtml.com/golang/Go%d3%ef%d1%d4%cd%f8%c2%e7... · Go语言网络编程 why404@七牛云存储 2012/07/21 12年7月21日星期六 1

自定义 http.Client

http.Get == http.DefaultClient.Get,

...

1512年7月21日星期六

Page 16: Go语言网络编程 - doc.haohtml.comdoc.haohtml.com/golang/Go%d3%ef%d1%d4%cd%f8%c2%e7... · Go语言网络编程 why404@七牛云存储 2012/07/21 12年7月21日星期六 1

http.Client Structtype Client struct {

// Transport 指定了执行⼀一个 HTTP 请求的运行机制 // http.DefaultTransport // http.RoundTripper

Transport RoundTripper

CheckRedirect func(req *Request, via []*Request) error

Jar CookieJar}

1612年7月21日星期六

Page 17: Go语言网络编程 - doc.haohtml.comdoc.haohtml.com/golang/Go%d3%ef%d1%d4%cd%f8%c2%e7... · Go语言网络编程 why404@七牛云存储 2012/07/21 12年7月21日星期六 1

自定义 http.Client 好处

发送自定义 HTTP Headers

改写重定向策略

etc.

1712年7月21日星期六

Page 18: Go语言网络编程 - doc.haohtml.comdoc.haohtml.com/golang/Go%d3%ef%d1%d4%cd%f8%c2%e7... · Go语言网络编程 why404@七牛云存储 2012/07/21 12年7月21日星期六 1

定义具体的 http.Clientclient := &http.Client{ CheckRedirect: redirectPolicyFunc,}

resp, err := client.Get("http://example.com")// …

req, err := http.NewRequest("GET", "http://example.com", nil)// …req.Header.Add("User-Agent", "Our Custom User-Agent")req.Header.Add("If-None-Match", `W/"TheFileEtag"`)resp, err := client.Do(req)// …

1812年7月21日星期六

Page 19: Go语言网络编程 - doc.haohtml.comdoc.haohtml.com/golang/Go%d3%ef%d1%d4%cd%f8%c2%e7... · Go语言网络编程 why404@七牛云存储 2012/07/21 12年7月21日星期六 1

http.Transport

http.Transport 对象指定了执行⼀一个 HTTP 请求时的运行规则

实现了 http.RoundTripper 接口

1912年7月21日星期六