如何访问全局变量

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

总部,开始

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

试图在另一个.go 文件中访问 StartTime 但是始终没有定义 StartTime

188630 次浏览

相反,我将“注入”起始时间变量,否则您将在包之间产生循环依赖关系。

总部,开始

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

另一个包裹,走

var StartTime time.Time

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

package dif


import (
"time"
)


var StartTime = time.Now()

在文件夹外我创建我的 main.go,它是 OK!

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 version > = 1.12中,有一些关于导入文件的新提示和一些更改。

1-你应该把你的文件放在另一个文件夹,例如我在“模型”文件夹中创建了一个文件,文件名是“ example.go”

当你想导入一个文件时,你必须使用大写!

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

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

文件目录是:

root
|_____main.go
|_____model
|_____example.go

这是一个例子:

package model


import (
"time"
)


var StartTime = time.Now()

当你想导入一个文件的时候,你应该使用大写字母

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”... 只要导入它。