Go语法记录

初学go语言,比较笨,有些语法老是忘记,特记录之:

一、获取指针使用 & 符号,如var a:=&slice

二、 指针作为参数传递,第一个括号为Receiver。代码见 "net/http" 包

func (mux *ServeMux) Handler(r *Request) (h Handler, pattern string) {if r.Method != "CONNECT" {if p := cleanPath(r.URL.Path); p != r.URL.Path {_, pattern = mux.handler(r.Host, p)return RedirectHandler(p, StatusMovedPermanently), pattern}}return mux.handler(r.Host, r.URL.Path)}

三、Comma-ok断言 Go语言里面有一个语法,可以直接判断是否是该类型的变量: value, ok = element.(T),这里value就是变量的值,ok是一个bool类型,element是interface变量,T是断言的类型。如果element里面确实存储了T类型的数值,那么ok返回true,否则返回false。

// NewRequest returns a new Request given a method, URL, and optional body.func NewRequest(method, urlStr string, body io.Reader) (*Request, error) {u, err := url.Parse(urlStr)if err != nil {return nil, err}rc, ok := body.(io.ReadCloser) // 这条语句是什么意思if !ok && body != nil {rc = ioutil.NopCloser(body)}req := &Request{Method: method, URL: u, Proto: "HTTP/1.1", ProtoMajor: 1, ProtoMinor: 1, Header: make(Header), Body: rc, Host: u.Host}if body != nil {switch v := body.(type) { // 这里也不懂case *strings.Reader:req.ContentLength = int64(v.Len())case *bytes.Buffer:req.ContentLength = int64(v.Len())}}return req, nil}

接受失败等于回归真实的自我,

Go语法记录

相关文章:

你感兴趣的文章:

标签云: