我是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 =。
答案 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)