2016-01-27 27 views
17

Sono abbastanza nuovo per Golang, questa dovrebbe essere una risposta semplice ma ho provato a cercare ovunque senza fortuna.Golang Global Accesso variabile

Come accedere a una variabile globale dichiarata/init nel mio main.go in un diverso pacchetto/file .go? Continua a dirmi che la variabile non è definita (lo so che le variabili globali sono cattivi, ma questo è solo per essere usato come un timestamp)

in main.go

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

tentativo di accedere StartTime in un diverso. vai al file , ma continua a ottenere StartTime undefined

+2

Possibile duplicato di [go build funziona bene ma non funziona] (http://stackoverflow.com/questions/21293000/go-build-works-fine-but-go-run-fails) –

+0

È la prima lettera sulla variabile nome in maiuscolo? – olif

+0

Sì, è in maiuscolo e il mio go build fallisce – Nighthee

risposta

33

Vorrei invece "iniettare" la variabile starttime, altrimenti hai una dipendenza circolare tra i pacchetti.

main.go

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

otherpackage.go

var StartTime time.Time 
+0

Sì, ha funzionato! Grazie! – Nighthee

3

creo un file dif.go che contiene il codice:

package dif 

import (
    "time" 
) 

var StartTime = time.Now() 

di fuori della cartella Creo il mio main.go, è è ok!

package main 

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

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

Uscite:

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

Files directory di struttura:

folder 
    main.go 
    dif 
    dif.go 

funziona!

+0

Il mio 'dif' è un'API riposante e non verrà chiamato all'avvio del programma ma solo quando è invocato tramite URL, quindi ho bisogno di inserire StartTime in main.go e passarlo a dif, lo stai passando da dif a main, grazie per il tentativo però! – Nighthee