是否可以为函数定义可选的接收器?
func (r ReceiverType) doSth(arg ArgType) (ReturnType) {
if r == nil {
return doSthWithoutReceiver()
}
return r.doSthWithReceiver()
}
这样我可以按如下方式调用函数:
var sth ReceiverType
resWithoutRecv := doSth()
resWithRecv := sth.doSth()
不需要基本上写两次相同的功能,一次使用和没有接收器一次?既然我没有找到任何东西,我认为这是不好的做法吗?
答案 0 :(得分:6)
不可能使receiver参数可选,但你可以声明一个方法和一个具有相同名称的函数:
func (r ReceiverType) doSth(arg ArgType) (ReturnType) {
return r.doSthWithReceiver()
}
func doSth(arg ArgType) (ReturnType) {
return doSthWithoutReceiver()
}
并按照问题中的说明打电话给他们:
var sth ReceiverType
resWithoutRecv := doSth()
resWithRecv := sth.doSth()
您还可以检查无接收器:
func (r *ReceiverType) doSth(arg ArgType) (ReturnType) {
if r == nil {
return doSthWithoutReceiver()
}
return r.doSthWithReceiver()
}
并将其称为:
var sth *ReceiverType
resWithoutRecv := sth.doSth() // sth == nil