GO中函数体外错误的非声明语句

时间:2015-11-17 13:59:14

标签: go

我是Go的新学员,这些问题让我很困惑。我无法解决它们,你们能帮我一把吗?

func Solution(A []int, B[]int, K int) int{
.......
res = MaxInt32 
low = 0
high = Min(900, largestId) //largestId is limited here
mid = 0

while(low <= high){
    mid = {low + high} / 2         55
    if(isAvailable(K, mid)){
        res := Min(res, mid)
        high :=mid - 1
    } else{
        low := mid + 1
    }

}
return res                         64
}                                  65

错误显示:

workspace/src/solution/solution.go:55: syntax error: unexpected =, expecting }
workspace/src/solution/solution.go:64: non-declaration statement outside function body
workspace/src/solution/solution.go:65: syntax error: unexpected }

我不明白为什么会出现这些问题?

2 个答案:

答案 0 :(得分:2)

Go中没有while循环。只有1个}}。如果我这样做:

for

我收到以下错误(与您的类似):

package main

func main() {
    var n int
    while (n < 10) {
        n++
    }
    return
}

如果我untitled 3:6: syntax error: unexpected ++, expecting } untitled 3:8: non-declaration statement outside function body untitled 3:9: syntax error: unexpected } (没有括号),我会得到更准确的消息,即第5行(while n < 10)上的意外名称错误。我相信由于括号使用编译器将(非保留字)while视为一种类型(函数调用或类型转换),但在意识到它不存在之前还有其他错误需要报告。因此,对你来说,这可能是一个令人困惑的信息。

除非您的代码中有其他错误,否则将while重命名为while应该有效。并放下括号。

答案 1 :(得分:0)

例如,

package main

import (
    "math"
)

func Min(a, b int) int {
    if a > b {
        return b
    }
    return a
}

func isAvailable(k, mid int) bool {
    // ...
    return true
}

func Solution(A []int, B []int, K int) int {
    largestId := 0
    // ...
    res := math.MaxInt32
    low := 0
    high := Min(900, largestId)

    for low <= high {
        mid := (low + high) / 2
        if isAvailable(K, mid) {
            res = Min(res, mid)
            high = mid - 1
        } else {
            low = mid + 1
        }

    }
    return res
}

func main() {}

您需要学习基本的Go语法。拿Go Tour