如何访问全局变量



如何在不同的 .go 包/文件中访问在我的 main.go 中声明/初始化的变量?一直告诉我变量是未定义的(我知道全局变量不好,但这只是用作时间戳)

在 main.go 中

var StartTime = time.Now()
func main(){...}

尝试访问其他 .go 文件中的开始时间但不断未定义开始时间

我会"注入"starttime变量,否则包之间有一个循环依赖关系。

主去

var StartTime = time.Now()
func main() {
   otherPackage.StartTime = StartTime
}

其他包.go

var StartTime time.Time

我创建了一个包含您的代码的文件dif.go

package dif
import (
    "time"
)
var StartTime = time.Now()

在文件夹外我创建我的main.go,没关系!

package main
import (
    dif "./dif"
    "fmt"
)
func main() {
    fmt.Println(dif.StartTime)
}

输出:

2016-01-27 21:56:47.729019925 +0800 CST

文件目录结构:

folder
  main.go
  dif
    dif.go

它有效!

我建议使用常见的导入方式。

首先,我将解释它称为"相对导入"的方式,也许这种方式会导致一些错误

其次,我将解释常见的导入方式。

第一:

在go版本中>= 1.12,有一些关于导入文件的新提示,并且发生了一些变化。

1-您应该将文件放在另一个文件夹中,例如我在"模型"文件夹中创建一个文件,文件名为" example.go"

2-要导入文件时,必须使用大写字母!

3-对要导入到另一个文件中的变量,结构和函数使用大写

注意:无法在另一个文件中导入 main.go。

文件目录为:

root
|_____main.go
|_____model
          |_____example.go

这是一个例子.go:

package model
import (
    "time"
)
var StartTime = time.Now()

这是main.go,当您要导入文件时,您应该使用大写字母。"Mod"以大写字母开头

package main
import (
    Mod "./model"
    "fmt"
)
func main() {
    fmt.Println(Mod.StartTime)
}

注意!!!

注意:我不建议这种类型的导入!

第二:

(正常导入)

导入文件的更好方法是:

你的结构应该是这样的:

root
|_____github.com
         |_________Your-account-name-in-github
         |                |__________Your-project-name
         |                                |________main.go
         |                                |________handlers
         |                                |________models
         |               
         |_________gorilla
                         |__________sessions

这是一个例子:

package main
import (
    "github.com/gorilla/sessions"
)
func main(){
     //you can use sessions here
}

因此,您可以在所需的每个位置导入"github.com/gorilla/sessions"...只需导入它。

相关内容

  • 没有找到相关文章

最新更新