Как получить доступ к глобальным переменным
Как получить доступ к переменной, которая была объявлена /init в моем main.go в другом пакете/файле .go? Говорит мне, что переменная не определена (я знаю, что глобальные переменные плохие, но это просто для использования в качестве метки времени)
в main.go
var StartTime = time.Now()
func main(){...}
пытается получить доступ к StartTime в другом файле .go
но продолжайте получать StartTime не определено
Ответы
Ответ 1
Вместо этого я буду "вводить" переменную времени старта, иначе у вас есть круговая зависимость между пакетами.
main.go
var StartTime = time.Now()
func main() {
otherPackage.StartTime = StartTime
}
otherpackage.go
var StartTime time.Time
Ответ 2
Я создаю файл 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
Это работает!
Ответ 3
Я предлагаю использовать общий способ импорта.
Сначала я объясню, как это называется "относительный импорт", может быть, это и является причиной некоторой ошибки
Во-вторых, я объясню общий способ импорта.
ПЕРВЫЙ:
В 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, вы должны использовать верхний регистр, когда вы хотите импортировать файл. "Мод" начинался с прописной буквы
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" в любое удобное вам место... просто импортируйте его.