猿问

切片的全局变量和作用域

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


忽然笑
浏览 238回答 3
3回答

冉冉说

好的,首先我建议您在继续之前阅读Effective Go。您正在使用以下方法声明全局变量:var Reqs []Req然后使用以下命令重新声明具有相同名称的变量:Reqs := ......您正在声明两个不同的变量。var Name 类型也初始化变量:var s string相当于:s := ""所以这使得以下行无用:Reqs = make([]Req, 0)你可以在这里尝试你的固定代码(Golang Play)。

HUWWW

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

陪伴而非守候

您正在Reqs与:=运营商重新声明。放下冒号。
随时随地看视频慕课网APP

相关分类

Go
我要回答