我刚刚开始学习Go
语言,但仍在尝试消化一些事情。
我写了一个函数add
:
func add(a int, b int) int {
return a + b
}
// works fine
func add(a, b) int {
return a + b
}
// ./hello.go:7: undefined: a
// ./hello.go:7: undefined: b
// Digested: May be I need to give type
func add(a, b int) int {
return a + b
}
// works fine interestingly
func add(a int, b) int {
return a + b
}
// ./hello.go:7: final function parameter must have type
我真的很困惑,或者由于缺乏知识而无法理解
的用例 final function parameter must have type
。
答案 0 :(得分:1)
我在" IdentifierList
"中提及Can you declare multiple variables at once in Go?:解释了a, b int
。
但是你需要有一个与函数的每个参数相关联的类型,而在上一个int a, b
参数列表中却不是这样。
订单始终为var type
,而不是type var
,位于variable declaration spec之后:
VarSpec = IdentifierList ( Type [ "=" ExpressionList ] | "=" ExpressionList ) .
您总是会在 IdentifierList
之后找到类型:a int
或a, b int
答案 1 :(得分:1)
以上都不是很正确。答案是Go允许您显式地为每个参数提供类型,如 a int,b int ,或者使用较短的表示法,其中列出两个或多个由逗号分隔的变量,以类型。所以在 a,b int 的情况下 - a和b都被定义为整数类型。您可以指定 a,b,c,d,e,f int ,在这种情况下,所有这些变量都将分配一种 int 。这里没有“未定义”类型。上面显示的(a,b)形式的问题会产生错误,因为您根本没有为变量指定任何类型。