Go 部分使用命名结果参数设置默认值
假设我有一个有3个返回值的函数。我设置了其中两个的值,如果不设置,我想将第三个保留为默认值。像这样的-Go 部分使用命名结果参数设置默认值,go,Go,假设我有一个有3个返回值的函数。我设置了其中两个的值,如果不设置,我想将第三个保留为默认值。像这样的- func call(a int) (int, int, r3 string){ // return a, a+1, "no error" // stmt 1 // return a, a+1 // stmt 2 // return // stmt 3 } 在未注释stmt 2
func call(a int) (int, int, r3 string){
// return a, a+1, "no error" // stmt 1
// return a, a+1 // stmt 2
// return // stmt 3
}
在未注释stmt 2或stmt 3的情况下运行,我得到以下错误-
duplicate argument int
int is shadowed during return
duplicate argument int
cannot use a (type int) as type string in return argument
cannot use a + 1 (type int) as type string in return argument
int在这里是如何隐藏的?返回列表没有命名的int参数
在未注释stmt 1的情况下运行时,出现以下错误-
duplicate argument int
int is shadowed during return
duplicate argument int
cannot use a (type int) as type string in return argument
cannot use a + 1 (type int) as type string in return argument
有人能解释这些错误的来源吗
是否不可能有命名结果参数的部分列表(甚至在使用命名结果参数时返回变量)
在参数或结果列表中,名称(IdentifierList)
要么全部出席,要么全部缺席。如果有,每个名字
表示指定类型的一项(参数或结果),以及
签名中的所有非空名称必须是唯一的。如缺席,则每人
type代表该类型的一项
游乐场: 输出:
tmp/sandbox842451638/main.go:4:33: duplicate argument int
tmp/sandbox842451638/main.go:6:2: int is shadowed during return
tmp/sandbox842451638/main.go:10:47: duplicate argument int
tmp/sandbox842451638/main.go:12:2: int is shadowed during return
tmp/sandbox842451638/main.go:16:34: duplicate argument int
tmp/sandbox842451638/main.go:18:2: int is shadowed during return
call1
是call2
的缩写。如您所见,您有重复的返回参数名称int
:“签名中的所有非空名称必须是唯一的。”第一个返回参数名称int
被第二个返回参数名称int
遮挡
如果您想要匿名返回参数,可以使用空白标识符。
package main
// duplicate argument int
func callA(a int) (int, int, r3 string) {
// int is shadowed during return
return
}
func callB(a int) (_ int, _ int, r3 string) {
return
}
func main() {}
游乐场:如果重新声明,同名变量不会出现阴影?我将(一个int)改为(一个bool),但在空返回时仍然得到相同的阴影错误。@peterSO我相信这是不正确的:“调用参数,
(一个int)
,键入int
,被返回参数名称int
”将其改为(一个float64)
,您会得到相同的错误,将一个return int更改为float64,则会丢失错误。错误的意思是,名为int
的第一个返回变量被名为int
的第二个返回变量隐藏。