Подтвердить что ты не робот

Как получить доступ к глобальным переменным

Как получить доступ к переменной, которая была объявлена /init в моем main.go в другом пакете/файле .go? Говорит мне, что переменная не определена (я знаю, что глобальные переменные плохие, но это просто для использования в качестве метки времени)

в main.go

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

пытается получить доступ к StartTime в другом файле .go но продолжайте получать StartTime не определено

4b9b3361

Ответ 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" в любое удобное вам место... просто импортируйте его.