Dans le didacticiel Go, et la plupart du code Go que j'ai examiné, les packages sont importés comme suit:
import (
"fmt"
"os"
"launchpad.net/lpad"
...
)
Mais dans http://Bazaar.launchpad.net/~niemeyer/lpad/trunk/view/head:/session_test.go , le package gocheck est importé avec un .
(période):
import (
"http"
. "launchpad.net/gocheck"
"launchpad.net/lpad"
"os"
)
Quelle est la signification du .
(période)?
Il permet aux identifiants du package importé d'être référencés dans le bloc de fichiers local sans qualificatif.
Si un point explicite (.) Apparaît au lieu d'un nom, tous les identifiants exportés du package seront déclarés dans le bloc de fichiers du fichier actuel et accessibles sans qualificatif.
Supposons que nous avons compilé un package contenant la clause package package math, qui exporte la fonction Sin, et installé le package compilé dans le fichier identifié par "lib/math". Ce tableau illustre comment Sin est accessible dans les fichiers qui importent le package après les différents types de déclaration d'importation.
Import declaration Local name of Sin
import "lib/math" math.Sin
import M "lib/math" M.Sin
import . "lib/math" Sin
Voici une analogie pour ceux qui viennent de Python:
import "os"
est à peu près équivalent à Python import os
import . "os"
est à peu près équivalent à Python from os import *
Dans les deux langues, l'utilisation de cette dernière est généralement mal vue, mais il peut y avoir de bonnes raisons de le faire.
Cela ne doit être utilisé que pour les tests.
Voici une documentation dans le wiki de golang
Si vous avez généré du code fictif comme avec mockgen et qu'il importe votre code de package, puis que votre package de test importe également votre code de package, vous obtenez une dépendance circulaire (quelque chose de golang choisit de laisser l'utilisateur décider de la résolution).
Cependant, si à l'intérieur de votre package de test vous utilisez la notation par points sur le package que vous testez, ils sont traités comme le même package et il n'y a aucune dépendance circulaire à avoir!