如何访问全局变量

How to access global variables

如何在另一个 .go package/file 中访问 main.go 中的 declared/init 变量?一直告诉我变量未定义(我知道全局变量不好,但这只是用作时间戳)

在main.go

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

尝试在不同的 .go 文件中访问 StartTime 但一直未定义 StartTime

我会 "inject" starttime 变量,否则包之间存在循环依赖。

main.go

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

otherpackage.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

有效!

我建议使用普通的导入方式。

首先我会解释它调用的方式"relative import"可能是这种方式导致一些错误

其次我将介绍常见的导入方式。

第一个:

在 go version >= 1.12 中有一些关于导入文件的新提示和一些更改。

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

2- 导入文件时必须使用大写!

3- 对要导入到其他文件中的变量、结构和函数使用大写字母

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

文件目录为:

root
|_____main.go
|_____model
          |_____example.go

这是一个 example.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"...只需导入即可。