如何访问全局变量
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"...只需导入即可。
如何在另一个 .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"...只需导入即可。