2016-01-27 14 views
17

Jestem całkiem nowym golangiem, to powinna być prosta odpowiedź, ale próbowałem wyszukiwać w każdym miejscu bez powodzenia.Golang Global Variable access

Jak uzyskać dostęp do zmiennej globalnej, która została zadeklarowana/init na moim pliku main.go w innym pakiecie/pliku .go? Powtarza mi, że zmienna jest niezdefiniowana (wiem, że zmienne globalne są złe, ale to jest po prostu być stosowany jako znacznik czasu)

w main.go

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

próbuje uzyskać dostęp StartTime w inny. idź do pliku , ale ciągle otrzymujesz niezdefiniowaną wartość StartTime

+2

Prawdopodobny duplikat [przejdź do kompilacji działa dobrze, ale uruchom się niepowodzeniem] (http://stackoverflow.com/questions/21293000/go-build-works-fine-but-go-run-fails) –

+0

Czy pierwsza litera w nazwie zmiennej wielkimi literami? – olif

+0

Tak, jest pisane wielką literą, a moja kompilacja nie powiedzie się – Nighthee

Odpowiedz

33

Zamiast tego wstawiłbym zmienną starttime, w przeciwnym razie istnieje zależność cykliczna między pakietami.

main.go

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

otherpackage.go

var StartTime time.Time 
+0

Tak, zadziałało! Dzięki! – Nighthee

3

utworzyć plik dif.go który zawiera kod:

package dif 

import (
    "time" 
) 

var StartTime = time.Now() 

Poza folderze tworzę main.go, to jest w porządku!

package main 

import (
    dif "./dif" 
    "fmt" 
) 

func main() { 
    fmt.Println(dif.StartTime) 
} 

Wyjścia:

2016-01-27 21:56:47.729019925 +0800 CST 

Pliki struktura katalogów:

folder 
    main.go 
    dif 
    dif.go 

to działa!

+0

Moje "dif" jest restful API i nie będzie wywoływany, gdy program się uruchomi, ale tylko wtedy, gdy jest wywoływany przez URL, więc muszę umieścić StartTime w main.go i przekazać go do dif, przekazujesz go od dif to main, dziękuję za spróbować! – Nighthee