【问题标题】:Go Global Variables and Scopes of slicesGo 全局变量和切片范围
【发布时间】:2014-08-12 14:01:52
【问题描述】:

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

【问题讨论】:

    标签: go


    【解决方案1】:

    好的,首先我建议您先阅读Effective Go,然后再继续。

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

    var Reqs []Req
    

    然后重新声明一个同名的变量:

    Reqs := ......
    

    你声明了两个不同的变量。


    var Name 类型也初始化变量:

    var s string
    

    相当于:

    s := ""
    

    所以这使得下面一行无用:

    Reqs = make([]Req, 0)
    

    你可以试试你的固定代码here (Golang Play)。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        您正在使用 := 运算符重新声明 Reqs。去掉冒号。

        你应该先从基础开始:

        【讨论】:

        • 谢谢,我已经开始处理这些文件了,只是找不到原因
        猜你喜欢
        • 2013-05-26
        • 2010-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-29
        • 2017-02-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多