Comme nous l’avons vu dans le billet précédent concernant la définition des packages , ce concept est très important dans la conception d’application et dans le cadre d’une bonne pratique. On parle aussi du principe DRY – Don’t Repeat Yourself, mais on reparlera plus tard de ce principe.
De manière générale il faut pouvoir réutiliser nos packages mais aussi ceux fournis dans la librairie de base ou toutes autres librairies tiers.
Exemple
package main import ( "fmt" ) func main() { fmt.Println("Hello, playground") }
Dans notre exemple, nous demandons à GO d’importer le package fmt, Ce package contient un ensemble de fonctions en rapport avec l’affichage et le formatage à l’écran. Grâce à cette approche de package cela va permettre la réutilisation dans n’importe quelle autre programme, application ou package. De plus, pour accéder à une fonction contenu dans ce package, on utilisera la notation à point. On préfixera avec le nom du package et ensuite le point et pour finir le nom de la fonction dans notre cas.
Avantages
- Lors de la compilation ce ne seront que les parties de code qui ont évoluées qui seront recompilées d’où un gain de temps non négligeables sur de grandes applications ;
- La création de package permet d’avoir une meilleure organisation de son code et de se faite de retrouver plus facilement des fonctions ou autres parties de code. On peut imaginer avoir un package qui ne s’occupe que des requêtes HTTP et un autre des requêtes FTP. On pourrait aussi raisonner en domaine fonctionnel.
- Grâce à l’accès aux fonctions du package par la notation a point, cela nous évitez d’avoir des conflits de noms sur les fonctions. L’écriture sera claire, concise et précise.
Syntaxes
Présentation des différentes écritures pour importer des packages dans un programme. Les nom des de packages sont toujours entre guillemets. Pour plus de précision, je vous revois vers la documentation officielle sur les spécifications du langage ici
Simple
package main import "fmt" func main() { fmt.Println("Foobar") }
Multiple
package main import ( "fmt" "math" ) func main() { fmt.Println(math.Mod(7, 2)) }
Utilisation d’Alias
package main import ( "fmt" myMathPackage "math" ) func main() { fmt.Println(myMathPackage.Mod(7, 2)) }
Sans nom du package
Cette notation n'est pas recommandé, voir même à bannir car elle va plutôt apporter de la confusion dans la lecture du code.
package main import ( . "fmt" . "math" ) func main() { Println(Mod(7, 2)) }
Importer avec le “blank identifier”
Cela va permettre de pouvoir avoir les initialisations qui se trouvent, éventuellement, dans le package math. L'ensemble de ces initialisations doivent se trouver dans la fonction init du package. Tout le reste ne sera pas accessible.
package main import ( "fmt" _ "math" ) func main() { fmt.Println("My name is John Doe") }
Sous-répertoire
Dans certains cas, il se peut que des packages ou mêmes les vôtres se subdivisent en d'autres packages sous adjacents. Il faut donc pouvoir les importer aussi. Prenons le cas du package math, il se subdivise en 4 packages (donc 4 sous-répertoires) qui sont : rand, big, cmplx, bits et prenons pas exemple le cas où vous voulez travailler qu'avec les bits.
package main import ( "fmt" "math/bits" ) func main() { fmt.Printf("LeadingZeros16(%016b) = %d\n", 1, bits.LeadingZeros16(1)) }
Ajouer un commentaire