我开始使用GO语言,并得到一个我无法弄清楚的错误。如何创建模块中所有函数都可以使用的全局切片?这就是我所拥有的:
package main
import (
"fmt"
)
type Req struct {
Req int
Name string
}
var Reqs []Req
func ReadReqs(fp string) {
var CReq Req;
CReq.Req = 1
CReq.Name = "first"
Reqs := append(Reqs, CReq)
}
func main() {
Reqs := make([]Req, 0)
if len(Reqs) > 0 {
fmt.Println(Reqs[0])
}
fmt.Println(Reqs)
}
由于以下错误,此代码无法编译:
./question.go:18: Reqs declared and not used
我在想,声明var Reqs [] Req应该声明变量,但它似乎并没有在ReadReqs函数中意识到它。我确实认识到全局变量很糟糕但是我想在这个简单的程序中使用全局变量。
答案 0 :(得分:3)
首先,我建议您在继续之前阅读Effective Go。
您正在使用以下方式声明全局变量:
var Reqs []Req
然后使用:
重新声明具有相同名称的变量Reqs := ......
您要声明两个不同的变量。
var名称类型也初始化变量:
var s string
相当于:
s := ""
所以这使得以下行毫无用处:
Reqs = make([]Req, 0)
您可以尝试固定代码here(Golang Play)。
答案 1 :(得分:1)
使用:=
声明一个新变量(不写入全局变量),并且函数作用域中的新变量未使用。 (与全局变量无关。)
答案 2 :(得分:1)