为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
红糖糍粑 2022-10-24 16:18:07
我正在研究http 的源代码Golang,我发现了这个func NewRequestWithContext(ctx context.Context, method, url string, body io.Reader) (*Request, error) {    ...    rc, ok := body.(io.ReadCloser)    ...}但这body是nil,它是通过以下方式传递的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)}函数Get传递nil给函数NewRequest,函数NewRequest将 this 传递nil给函数NewRequestWithContext,那么函数 NewRequestWithContext用来nil调用nil.(io.ReadCloser),为什么不引起panic呢?
查看完整描述

2 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

该声明

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

测试是否body为 ReadCloser. 如果不是,rc则将设置为nil,并将ok设置为false

如果代码是:

rc:=body.(io.ReadCloser)

然后用一个零的身体,它会惊慌失措。


查看完整回答
反对 回复 2022-10-24
?
FFIVE

TA贡献1797条经验 获得超6个赞

该语句rc, ok := body.(io.ReadCloser)是在赋值特殊形式中使用的类型断言。body为 nil 时,rc设置为 nil 并ok设置为 false。



查看完整回答
反对 回复 2022-10-24
  • 2 回答
  • 0 关注
  • 69 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号