gpt4 book ai didi

go - 是否可以选择接收器?

转载 作者:IT王子 更新时间:2023-10-29 02:26:15 28 4
gpt4 key购买 nike

是否可以为函数定义一个可选的接收器?

func (r ReceiverType) doSth(arg ArgType) (ReturnType) {
if r == nil {
return doSthWithoutReceiver()
}

return r.doSthWithReceiver()
}

这样我就可以调用函数如下:

var sth ReceiverType
resWithoutRecv := doSth()
resWithRecv := sth.doSth()

基本上不需要将相同的函数写两次,一次有接收器,一次没有接收器?由于我没有找到任何东西,我认为这两种方式都是不好的做法?

最佳答案

接收者参数是可选的是不可能的,但是你可以声明一个同名的方法和函数:

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()

您还可以检查 nil 接收者:

func (r *ReceiverType) doSth(arg ArgType) (ReturnType) {
if r == nil {
return doSthWithoutReceiver()
}
return r.doSthWithReceiver()
}

并这样调用它:

var sth *ReceiverType
resWithoutRecv := sth.doSth() // sth == nil

关于go - 是否可以选择接收器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49338604/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com