web-dev-qa-db-fra.com

Comment accéder aux variables globales

Je suis assez nouveau sur golang, cela devrait être une réponse simple, mais j’ai essayé de chercher partout sans succès.

Comment accéder à une variable globale déclarée/init dans mon main.go dans un autre package/fichier .go? Continue à me dire que la variable est indéfinie (je sais que les variables globales sont mauvaises, mais ceci est juste pour être utilisé comme un horodatage)

en main.go

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

essaye d'accéder à StartTime dans un fichier .go différent, mais continue de ne pas définir StartTime

39
Nighthee

Je voudrais "injecter" la variable starttime à la place, sinon vous avez une dépendance circulaire entre les packages.

main.go

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

otherpackage.go

var StartTime time.Time
61
olif

Je crée un fichier dif.go contenant votre code:

package dif

import (
    "time"
)

var StartTime = time.Now()

En dehors du dossier, je crée mon main.go, ça va!

package main

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

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

Les sorties:

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

Structure du répertoire de fichiers:

folder
  main.go
  dif
    dif.go

Ça marche!

7
joy miao

Je suggère d'utiliser la méthode courante d'importation.

Je vais d’abord expliquer la façon dont il a été appelé "importation relative" peut-être de cette façon à cause d’une erreur

Deuxièmement, je vais expliquer la manière habituelle d’importer.

PREMIÈRE:

Dans go version> = 1.12, quelques nouveaux conseils sur le fichier d'importation ont été apportés et certains changements ont été apportés.

1- Vous devez placer votre fichier dans un autre dossier. Par exemple, je crée un fichier dans le dossier "model". Le nom du fichier est "example.go".

2- Vous devez utiliser des majuscules pour importer un fichier!

3- Utilisez des majuscules pour les variables, structures et fonctions que vous souhaitez importer dans d'autres fichiers

Remarque: Il n'y a aucun moyen d'importer le fichier main.go dans un autre fichier.

le répertoire de fichiers est:

root
|_____main.go
|_____model
          |_____example.go

c'est un exemple.go:

package model

import (
    "time"
)

var StartTime = time.Now()

et ceci est main.go, vous devez utiliser des majuscules lorsque vous souhaitez importer un fichier. "Mod" a commencé avec des majuscules

package main

import (
    Mod "./model"
    "fmt"
)

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

REMARQUE!!!

NOTE: je ne recommande pas ce type d'importation!

SECONDE:

(importation normale)

le meilleur moyen d'importer un fichier est:

votre structure devrait être comme ceci:

root
|_____github.com
         |_________Your-account-name-in-github
         |                |__________Your-project-name
         |                                |________main.go
         |                                |________handlers
         |                                |________models
         |               
         |_________gorilla
                         |__________sessions

et voici un exemple:

package main

import (
    "github.com/gorilla/sessions"
)

func main(){
     //you can use sessions here
}

vous pouvez donc importer "github.com/gorilla/sessions" partout où vous le souhaitez ... importez-le.

1
raskul