登录
首页 >  Golang >  Go问答

为什么我们可以使用`nil`来获取成员

来源:stackoverflow

时间:2024-04-10 14:00:34 288浏览 收藏

你在学习Golang相关的知识吗?本文《为什么我们可以使用`nil`来获取成员》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

我正在研究golanghttp源代码,我发现了这个

func newrequestwithcontext(ctx context.context, method, url string, body io.reader) (*request, error) {
    ...
    rc, ok := body.(io.readcloser)
    ...
}

但是这个bodynil,它是通过以下方式传递的

func NewRequest(method, url string, body io.Reader) (*Request, error) {
    return NewRequestWithContext(context.Background(), method, url, body)
}
func (c *Client) Get(url string) (resp *Response, err error) {
    req, err := NewRequest("GET", url, nil)
    if err != nil {
        return nil, err
    }
    return c.Do(req)
}

函数 getnil 传递给函数 newrequest

函数 newrequest 将此 nil 传递给函数 newrequestwithcontext

然后函数newrequestwithcontext使用nil调用nil.(io.readcloser),为什么不会引起panic


正确答案


语句 rc, ok := body.(io.readcloser) 是用于赋值特殊形式的 type assertion。当body为nil时,rc设置为nil,ok设置为false。

语句

rc, ok := body.(io.readcloser)

测试 body 是否为 readcloser。如果不是,则 rc 将设置为 nilok 将设置为 false

如果代码是:

rc:=body.(io.ReadCloser)

然后如果身体为零,它就会恐慌。

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

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