gpt4 book ai didi

go - 函数定义了未命名的参数,但调用者仍然传递值

转载 作者:行者123 更新时间:2023-12-01 22:31:28 25 4
gpt4 key购买 nike

我正在尝试理解 Golang 中的 Wire 库,并在 wire.go 中找到它。有一个函数如下所示:

func NewSet(...interface{}) ProviderSet {
return ProviderSet{}
}

为什么 ...interface{}) 在我看来很陌生参数未命名(意味着未在函数内部使用)但调用者仍传递 有意义的值(value)观呢?
var Set = wire.NewSet(
wire.Value(Foo(41)),
provideFooBar)

最佳答案

参数被命名或未命名与调用者是否必须为它们传递值无关。未命名只是意味着它们不能在函数内部使用(不能被引用)。
NewSet有一个可变参数,这意味着可以将任意数量的参数传递给它,这些参数可以分配给类型,并且任何值都可以分配给interface{} (所有值都实现了空接口(interface))。
NewSet() 的“空”实现您看到的只是文档和编译器的占位符。生成的代码将使用传递的参数。

如果你有一个功能:

func dummy(int) {}

你不能这样称呼它 dummy() ,这是一个编译时错误。您只能通过传递 int 来调用它对它的值(value),例如 dummy(1) .

见相关: Is unnamed arguments a thing in Go?

关于go - 函数定义了未命名的参数,但调用者仍然传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61770795/

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