Go 戈朗:为什么捕获某些函数返回值是可选的?

Go 戈朗:为什么捕获某些函数返回值是可选的?,go,Go,为什么go有时允许调用函数而不捕获两个返回值?例如: func TestGolang() { myMap := make(map[string]string) test := myMap["value"] // or test, success := myMap["value"] } 而在其他时候,如果不想使用值,则需要捕获所有返回结果并使用空白标识符 test := os.Stat("test") // fails test, _ := os.Stat("te

为什么go有时允许调用函数而不捕获两个返回值?例如:

func TestGolang() {
    myMap := make(map[string]string)
    test := myMap["value"]
    // or
    test, success := myMap["value"]
}
而在其他时候,如果不想使用值,则需要捕获所有返回结果并使用空白标识符

test := os.Stat("test") // fails
test, _ := os.Stat("test") // only way to make it work

我认为golang不支持单个函数的不同方法签名。第一个示例是如何工作的?我是否可以实现自己的函数,可以选择返回错误或状态标志,但如果未捕获第二个返回值,则不会出错?

事实上,golang不支持函数重载,因此不能为函数定义不同的签名。但是语言定义中的某些操作(如频道接收器或从映射中获取数据)具有类似重载的行为。

事实上,golang不支持函数重载,因此不能为函数定义不同的签名。但是,语言定义中的某些操作(如频道接收器或从映射中获取数据)具有类似重载的行为。

这不是可选的,而是全取或全无。《太糟糕了,围棋》的可能复制品有自己的诡计,用户甚至无法复制。这经常让人觉得围棋是“作弊”。这不是随意的,而是全力以赴或一无所获。《太糟糕了,围棋》的可能复制品有自己的诡计,用户甚至无法复制。这经常让人觉得围棋是“作弊”。要了解更多详细信息,你可以查看以下答案:这是正确的。语言定义中的许多操作(特别是类型断言、映射值检索和通道接收,尽管我可能忘记了其他操作)都有一个和两个值“版本”,第二个(可选)值指示操作的“状态”(在类型断言的情况下,也可以防止失败时出现死机)。但是,请注意,任何函数都可以通过省略隐式忽略所有返回值来调用:有关更详细的信息,您可以查看以下答案:这是正确的。语言定义中有许多操作(值得注意的是,类型断言、映射值检索和通道接收都有一个和两个值的“版本”,第二个(可选)值指示操作的“状态”(在类型断言的情况下,还可以防止失败时出现恐慌).但是,请注意,任何函数都可以调用,所有返回值都可以通过省略隐式忽略: