gpt4 book ai didi

function - 接受无序函数参数的惯用方式

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

我正在学习围棋。

在 JavaScript 中,通过将参数封装在一个对象中来定义一个接受多个无序参数的函数是微不足道的:

// define our function
var foo = function(params) {
// ... don't care
};

// specify parameters as an object literal
var params = {
alpha: true,
bravo: 10,
charlie: "delta",
};

// pass the params to the function
foo(options);

在 Go 中完成此任务的惯用方法是什么?我知道 Go 有哈希、结构、类型和接口(interface),但我不确定在这里使用哪个最好。

请注意,我想导出有问题的函数以便在它自己的包之外使用。

最佳答案

同理。将它们封装在一个结构中。

type FooParameters struct {
Alpha bool
Bravo int
Charlie string
}

func Foo(params FooParameters) {
fmt.Print(params.Charlie)
// ... don't care
}

func main() {
// Any order is fine
params := FooParameters{
Bravo: 10,
Charlie: "delta",
Alpha: true,
}
Foo(params)
}

https://play.golang.org/p/cU0Jd7_jN8


你询问了匿名结构,它们是惯用的(它们不时出现在 stdlib 中),但它们使用起来有点麻烦,所以你通常不需要它们,除非结构是非常小,很少使用。例如,这是您的界面在使用匿名结构时的样子。

func Foo(params struct {
Alpha bool
Bravo int
Charlie string
}) {
fmt.Print(params.Charlie)
// ... don't care
}

func main() {
// Any order is fine
params := struct {
Alpha bool
Bravo int
Charlie string
}{
Bravo: 10,
Charlie: "delta",
Alpha: true,
}
Foo(params)
}

https://play.golang.org/p/r4yXh7oADe

IMO 很难阅读,而且需要输入很多内容。命名类型只是为了方便。在任何使用命名类型的地方,您都可以使用匿名类型(但正如 Milo 指出的那样,您通常不应该这样做)。

关于function - 接受无序函数参数的惯用方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46718048/

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