如何在不同的 .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"...只需导入它。