我的计划有什么错误?我已经使用过这些值了?

时间:2018-05-03 07:58:58

标签: go

我是golang的新手,这是我的计划:

func main() {
    checkParam(os.Args)

    var got,bj,ll float32
    var dur int
    var err error

    if bj, err := strconv.ParseFloat(os.Args[1], 32); err != nil {
        usageExit()
    }

    if ll, err := strconv.ParseFloat(os.Args[2], 32); err != nil {
        usageExit()
    }

    if dur, err := strconv.Atoi(os.Args[3]); err != nil {
        usageExit()
    }

    for i := 0; i < dur; i++ {
        got := bj * (1.0 + ll)
    }
    fmt.Print("Result: %f", got)

    _ = got
    _ = bj
    _ = ll
    _ = dur
    _ = err }

但我跑步时遇到错误:

gateway@gateway-virtual-machine:basic$ go run fulijisuan.go
command-line-arguments
./fulijisuan.go:27:47: bj declared and not used
./fulijisuan.go:31:47: ll declared and not used
./fulijisuan.go:35:38: dur declared and not used 
./fulijisuan.go:40:22: got declared and not used

在我看来,我定义了上面的err / bj / ll / fur /,然后使用这些值来接受Args。

为什么我收到错误?我想我已经使用了这些值。

已修复,替换:= into =。

2 个答案:

答案 0 :(得分:2)

您正确定义了变量,但使用了它们。使用它们或至少分配给_

_ = err

在大多数编程语言中,您最多会收到有关未使用变量的警告。 Go强制使用每个声明的变量,并使用刚刚遇到的错误停止编译。

通过在:=块范围内使用if,您声明了具有相同名称的新变量,但未使用该范围内的新变量。

答案 1 :(得分:1)

Golang FAQ部分中,提到了未使用变量错误的原因:

  

未使用的变量的存在可能表示错误,而未使用   导入只会减慢编译速度,这种效果可能会变成现实   随着程序累积代码和程序员随着时间的推移而变得非常重要   出于这些原因,Go拒绝使用未使用的程序编译程序   变量或进口,长期交易短期方便   建立速度和计划清晰度。

您声明的变量应该在您的程序中在主范围内的块级别使用。这就是错误

的原因
func main() {
    checkParam(os.Args)

    var got,bj,ll float32
    var dur int
    var err error

    if bj, err := strconv.ParseFloat(os.Args[1], 32); err != nil {
        usageExit()
    }

    fmt.Println(bj) // use declared variables in your program
}

如果您真的想跳过像err这样的变量,可以使用_,如下所示

bj, _ := strconv.ParseFloat(os.Args[1], 32)