去全局变量和切片范围

时间:2014-08-12 14:01:53

标签: go

我开始使用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函数中意识到它。我确实认识到全局变量很糟糕但是我想在这个简单的程序中使用全局变量。

3 个答案:

答案 0 :(得分:3)

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

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

var Reqs []Req

然后使用:

重新声明具有相同名称的变量
Reqs := ......

您要声明两个不同的变量。


var名称类型也初始化变量:

var s string

相当于:

s := ""

所以这使得以下行毫无用处:

Reqs = make([]Req, 0)

您可以尝试固定代码here(Golang Play)。

答案 1 :(得分:1)

使用:=声明一个新变量(不写入全局变量),并且函数作用域中的新变量未使用。 (与全局变量无关。)

答案 2 :(得分:1)

您正在使用Reqs运算符重新声明:=。放下结肠。

你应该首先从基础开始: