2016-01-27 11 views
17

Ich bin relativ neu zu Golang, sollte dies eine einfache Antwort sein, aber ich habe versucht, überall ohne Glück zu suchen.Golang Global Variable Zugriff

Wie greife ich auf eine globale Variable zu, die/init in meinem main.go in einem anderen .go-Paket/Datei deklariert wurde? Hält mich zu sagen, dass die Variable nicht definiert ist (ich weiß, dass globale Variablen sind schlecht, aber das ist nur als ein Zeitstempel verwendet werden)

in main.go

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

versucht, Startzeit in einem anderen zu gelangen. gehen Sie Datei , aber erhalten StartTime undefined

+2

Mögliches Duplikat von [go build funktioniert gut, aber go run scheitert] (http://stackoverflow.com/questions/21293000/go-build-works-fine-but-go-run-fails) –

+0

Ist der erste Buchstabe auf dem Variablennamen groß geschrieben? – olif

+0

Ja, es ist großgeschrieben, und mein Build Build schlägt fehl – Nighthee

Antwort

33

Ich würde stattdessen die Startzeit Variable "injizieren", sonst haben Sie eine zirkuläre Abhängigkeit zwischen den Paketen.

main.go

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

otherpackage.go

var StartTime time.Time 
+0

Ja, es hat funktioniert! Vielen Dank! – Nighthee

3

erstelle ich eine Datei dif.go, die Ihr Code enthält:

package dif 

import (
    "time" 
) 

var StartTime = time.Now() 

außerhalb des Ordners ich meine main.go erstellen, es ist in Ordnung!

package main 

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

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

Ausgänge:

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

Dateien Verzeichnisstruktur:

folder 
    main.go 
    dif 
    dif.go 

Es funktioniert!

+0

Meine 'Diff' ist eine erholsame API und wird nicht aufgerufen, wenn das Programm startet, sondern nur wenn es durch URL aufgerufen wird, also muss ich die StartTime in main.go setzen und an dif übergeben, von der Sie es weitergeben dif zu main, danke für den Versuch aber! – Nighthee