dssqq82402 2017-11-20 17:28
浏览 109

Golang检查接口是否为空[重复]

I ran into a piece of Go code that I don't really unterstand:

package main

import (
    "io"
)

type MyCloser struct {
    internalImplementation io.Closer
    // other fields here
}

func (c *MyCloser) Close() error {
    return c.internalImplementation.Close()
}

func closeUnlessNil(c io.Closer) {
    if c != nil {
        c.Close()
    }
}

func main() {
    var c *MyCloser // c == nil
    defer closeUnlessNil(c)
}

Try here: https://play.golang.org/p/0CA4fTKpMs

The code causes a segmentation fault when c.Close() is called in line 18.

I have two questions about this:

  1. How exactly is this happening? What is the value of c in closeUnlessNil(io.Closer)? I would have thought it's nil, but that's obviously not the case.
  2. Is it possible to write a generic closeUnlessNil(io.Closer) function that works with any io.Closer and calls Close() only if the parameter is not nil?
</div>
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
    • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
    • ¥15 gdf格式的脑电数据如何处理matlab
    • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
    • ¥100 监控抖音用户作品更新可以微信公众号提醒
    • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
    • ¥70 2048小游戏毕设项目
    • ¥20 mysql架构,按照姓名分表
    • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
    • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题