2023-06-01 07:00:00

Go?

Go可以有可选参数吗?或者我可以定义两个不同的函数,具有相同的名称和不同数量的参数?


当前回答

实现可选参数的一个好方法是使用可变参数。函数实际上接收您指定的任何类型的片。

func foo(params ...int) {
    fmt.Println(len(params))
}

func main() {
    foo()
    foo(1)
    foo(1,2,3)
}

其他回答

我最终使用了参数和可变参数结构的组合。这样,我就不需要改变现有的由多个服务使用的接口,而且我的服务能够根据需要传递额外的参数。golang playground中的示例代码:https://play.golang.org/p/G668FA97Nu

Go不支持可选参数、默认值和函数重载,但你可以使用一些技巧来实现相同的功能。

分享一个例子,你可以在一个函数中有不同数量和类型的参数。这是一个简单易懂的代码,你需要添加错误处理和一些逻辑。

func student(StudentDetails ...interface{}) (name string, age int, area string) {
    age = 10 //Here Age and area are optional params set to default values
    area = "HillView Singapore"

    for index, val := range StudentDetails {
        switch index {
            case 0: //the first mandatory param
                name, _ = val.(string)
            case 1: // age is optional param
                age, _ = val.(int)
            case 2: //area is optional param
                area, _ = val.(string)
        }
    }
    return
}

func main() {
    fmt.Println(student("Aayansh"))
    fmt.Println(student("Aayansh", 11))
    fmt.Println(student("Aayansh", 15, "Bukit Gombak, Singapore"))
}

Go中不支持可选参数和函数重载。Go确实支持可变数量的参数:参数

Go语言不支持方法重载,但你可以像可选参数一样使用可变参数,也可以使用interface{}作为参数,但这不是一个好的选择。

不——都不是。根据Go for c++程序员文档,

Go不支持函数 重载,不支持用户 定义操作符。

我找不到一个同样明确的声明,说明可选参数不受支持,但它们也不受支持。