如何在Go中的if语句中更新变量的值?

时间:2014-07-26 17:29:55

标签: go conditional

我正在尝试学习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'

1 个答案:

答案 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

     

Short variable declarations

     

短变量声明使用语法:

ShortVarDecl = IdentifierList ":=" ExpressionList .
     

它是带初始化程序的常规变量声明的简写   表达式,但没有类型:

"var" IdentifierList = ExpressionList .
     

与常规变量声明不同,短变量声明可以   重新声明变量,只要它们最初是在早些时候宣布的   具有相同类型的相同块,以及至少一个非空白块   变量是新的。因此,重新声明只能出现在   多变量简短声明。重新申报不会引入   新变量;它只是为原始版本赋予了一个新值。