gpt4 book ai didi

function - 在 go 中重载函数不起作用

转载 作者:IT王子 更新时间:2023-10-29 01:49:14 25 4
gpt4 key购买 nike

我有一个函数当前不接收 bool 参数,但随后使用硬编码的 bool 调用另一个函数。我们需要删除硬编码调用并允许传递 bool 值。

我首先想到我可以尝试一些默认参数 - 我的谷歌搜索结果表明 Go 显然不支持可选(resp.default)参数。

所以我想我会尝试函数重载。

我在 reddit 上找到了这个帖子,上面说它使用自版本 1.7.3 以来的特殊指令: https://www.reddit.com/r/golang/comments/5c57kg/when_did_function_overloading_get_slipped_in/我正在使用 1.8,但仍然无法正常工作。

我什至不确定我是否可以使用该指令,但我推测立即更改函数签名可能很危险,因为我不知道谁在使用该函数...

无论如何 - 即使//+ 重载它也不起作用

在 Go 中是否有任何“特殊”的方式或模式来解决这个问题?

//some comment
//+overloaded
func (self *RemoteSystem) Apply(rpath, lpath string, dynamic bool) error {
result, err := anotherFunc(rpath, dynamic)
}

//some comment
//+overloaded
func (self *RemoteSystem) Apply(rpath, lpath string ) error {
//in this function anotherFunc was being called, and dynamic is hardcoded to true
//result, err := anotherFunc(rpath, true)
return self.Apply(rpath, lpath, true)
}

当我运行测试时,我得到(请原谅我省略了部分文件的真实路径):

too many arguments in call to self.Apply
have (string, string, bool)
want (string, string)
../remotesystem.go:178: (*RemoteSystem).Apply redeclared in this block
previous declaration at ../remotesystem.go:185

最佳答案

重载在 Go 中不可用。与其编写具有相同名称但做不同事情的函数,不如在函数名称中更能表达函数的作用。在这种情况下,通常会这样做:

func (self *RemoteSystem) Apply(rpath, lpath string, dynamic bool) error {
result, err := anotherFunc(rpath, dynamic)
}

func (self *RemoteSystem) ApplyDynamic(rpath, lpath string ) error {
//in this function anotherFunc was being called, and dynamic is hardcoded to true
return self.Apply(rpath, lpath, true)
}

仅通过函数名称,您就可以轻松分辨出不同之处和原因。

另一个提供一些上下文的例子(双关语)。我使用 go-endpoints 在 Go 中编写了很多 Google App Engine 代码。根据您是否有 context ,记录事情的方式是不同的。我的日志记录功能是这样结束的。

func LogViaContext(c context.Context, m string, v ...interface{}) {
if c != nil {
appenginelog.Debugf(c, m, v...)
}
}

func LogViaRequest(r *http.Request, m string, v ...interface{}) {
if r != nil {
c := appengine.NewContext(r)
LogViaContext(c, m, v...)
}
}

关于function - 在 go 中重载函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42986096/

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