登录
首页 >  Golang >  Go问答

关于golang语法的一个问题

来源:SegmentFault

时间:2023-01-22 19:15:39 141浏览 收藏

本篇文章向大家介绍《关于golang语法的一个问题》,主要包括go、code、编程语言,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

今天看go语言net包下的代码时有些疑惑

先上代码, 有疑问的语句用注视标出来了:

// 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里面特有的么?

正确答案

1)

rc, ok := body.(io.ReadCloser)
为类型断言 (type assertion)
http://golang.org/ref/spec#Type_asser...

2) 跟上个类似,不过是 type switch
http://golang.org/ref/spec#Type_switc...

终于介绍完啦!小伙伴们,这篇关于《关于golang语法的一个问题》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表