我正在尝试学习Go并且我已经创建了一个函数,我声明了一个变量game_ratio并将其设置为0.0。然后我有一个if语句,我尝试更新game_ratio的值。当我尝试编译时,我收到以下错误消息: 'game_ratio已声明且未使用'
这是我的功能:
func gameRatio(score1 int, score2 int, max_score float64) float64 {
var game_ratio float64 = 0.0
var scaled_score_1 = scaleScore(score1, max_score)
var scaled_score_2 = scaleScore(score2, max_score)
fmt.Printf("Scaled score for %v is %v\n", score1, scaled_score_1)
fmt.Printf("Scaled score for %v is %v\n", score2, scaled_score_2)
if score1 > score2 {
game_ratio := (scaled_score_1+1.0)/(scaled_score_1+scaled_score_2+2.0) + 1.0*0.5
}
return game_ratio
}
以下是调用它的代码:
func main() {
flag.Parse()
s1 := flag.Arg(0)
s2 := flag.Arg(1)
i1, err := strconv.Atoi(s1)
i2, err := strconv.Atoi(s2)
if err != nil {
fmt.Println(err)
os.Exit(2)
}
fmt.Println("Game ratio is", gameRatio(i1, i2, 6))
}
ScaleScore是我写的另一个函数。如果我删除if语句,则代码可以正常工作。
要运行我的应用,请输入'排名28 24'
答案 0 :(得分:4)
短变量声明正在重新声明game_ratio
。
game_ratio := (scaled_score_1+1.0)/(scaled_score_1+scaled_score_2+2.0) + 1.0*0.5
使用作业。写:
game_ratio = (scaled_score_1+1.0)/(scaled_score_1+scaled_score_2+2.0) + 1.0*0.5
The Go Programming Language Specification
短变量声明使用语法:
ShortVarDecl = IdentifierList ":=" ExpressionList .
它是带初始化程序的常规变量声明的简写 表达式,但没有类型:
"var" IdentifierList = ExpressionList .
与常规变量声明不同,短变量声明可以 重新声明变量,只要它们最初是在早些时候宣布的 具有相同类型的相同块,以及至少一个非空白块 变量是新的。因此,重新声明只能出现在 多变量简短声明。重新申报不会引入 新变量;它只是为原始版本赋予了一个新值。