为了账号安全,请及时绑定邮箱和手机立即绑定

切片的全局变量和作用域

切片的全局变量和作用域

Go
忽然笑 2021-08-10 13:32:03
我从 GO 语言开始,遇到了一个我无法弄清楚的错误。如何创建模块中所有函数都可以使用的全局切片?这是我所拥有的:package mainimport (    "fmt")type Req struct {    Req     int    Name    string}var Reqs []Reqfunc 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 函数中。我确实意识到全局变量很糟糕,但我想在这个简单的程序中使用全局变量。
查看完整描述

3 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

好的,首先我建议您在继续之前阅读Effective Go

您正在使用以下方法声明全局变量:

var Reqs []Req

然后使用以下命令重新声明具有相同名称的变量:

Reqs := ......

您正在声明两个不同的变量。


var Name 类型也初始化变量:

var s string

相当于:

s := ""

所以这使得以下行无用:

Reqs = make([]Req, 0)

你可以在这里尝试你的固定代码(Golang Play)。


查看完整回答
反对 回复 2021-08-10
?
HUWWW

TA贡献1874条经验 获得超12个赞

随着:=您声明一个新变量(不写入全局)并且函数范围内的新变量未使用。(与全局变量无关。)


查看完整回答
反对 回复 2021-08-10
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

您正在Reqs:=运营商重新声明。放下冒号。



查看完整回答
反对 回复 2021-08-10
  • 3 回答
  • 0 关注
  • 237 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信