Un package Go se compose de fichiers Go situĂ©s dans le mĂȘme rĂ©pertoire, au dĂ©but desquels se trouve la mĂȘme expression de
package
. Les packages qui se connectent aux programmes vous permettent d'étendre leurs capacités. Certains packages font partie de la bibliothÚque Go standard. Cela signifie que si vous utilisez Go, ils sont déjà installés. D'autres packages sont installés à l'aide de la commande
go get
. Vous pouvez également écrire vos propres Go-packages, créer des fichiers dans des répertoires spéciaux et respecter les rÚgles de conception des packages.

Le matĂ©riel, dont nous publions la traduction aujourd'hui, est un guide pour le dĂ©veloppement de Go-packages pouvant ĂȘtre connectĂ©s Ă d'autres fichiers.
Prérequis
- Configurez votre environnement logiciel Go (découvrez comment procéder ici ). Créez un espace de travail Go (le cinquiÚme point du matériel ci-dessus lui est dédié). Dans la section suivante de ce document, vous trouverez des exemples dont la reproduction est recommandée à la maison. Vous pouvez donc mieux y faire face.
- Pour approfondir vos connaissances sur
GOPATH
- jetez un Ćil Ă ce matĂ©riel.
Ăcriture et importation de packages
L'Ă©criture de code de package est identique Ă l'Ă©criture de code Go standard. Les packages peuvent contenir des dĂ©clarations de fonctions, de types et de variables, qui peuvent ensuite ĂȘtre utilisĂ©es dans d'autres programmes Go.
Avant de commencer à créer un nouveau package, nous devons accéder à l'espace de travail Go. Il est situé sur le chemin spécifié par la variable
GOPATH
. Par exemple, que notre organisation s'appelle
gopherguides
. En mĂȘme temps, nous, en tant que rĂ©fĂ©rentiel, utilisons
GitHub
. Cela conduit au fait que, le long du chemin spécifié par
GOPATH
, nous avons la structure de dossiers suivante:
âââ $GOPATH âââ src âââ github.com âââ gopherguides
Nous allons nommer le package que nous développerons dans ce guide,
greet
. Pour ce faire, créez le répertoire d'
greet
dans le répertoire
gopherguides
. Par conséquent, la structure de dossiers existante prendra la forme suivante:
âââ $GOPATH âââ src âââ github.com âââ gopherguides âââ greet
Nous sommes maintenant prĂȘts Ă ajouter le premier fichier au rĂ©pertoire d'
greet
. En rĂšgle gĂ©nĂ©rale, un fichier qui est le point d'entrĂ©e d'un package est appelĂ© de la mĂȘme maniĂšre que le rĂ©pertoire du package. Dans ce cas, cela signifie que nous, dans le rĂ©pertoire d'
greet
, créons le
greet.go
:
âââ $GOPATH âââ src âââ github.com âââ gopherguides âââ greet âââ greet.go
Dans ce fichier, nous pouvons écrire du code que nous voulons réutiliser dans nos projets. Dans ce cas, nous allons créer la fonction
Hello
, qui affiche le texte
Hello, World!
.
Ouvrez le fichier
greet.go
dans un éditeur de texte et ajoutez-y le code suivant:
package greet import "fmt" func Hello() { fmt.Println("Hello, World!") }
Analysons le contenu de ce fichier. La premiĂšre ligne de chaque fichier doit contenir le nom du package dans lequel nous travaillons. Puisque nous sommes dans le
package
greet
, le mot-clé
package
est utilisé ici, suivi du nom du package:
package greet
Cela indique au compilateur d'accepter tout ce qui se trouve dans le fichier dans le cadre du package d'
greet
.
Ensuite, les packages nécessaires sont importés à l'aide de l'instruction
import
. Dans ce cas, nous n'avons besoin que d'un seul paquet -
fmt
:
import "fmt"
Et enfin, nous créons la fonction
Hello
. Elle utilisera les capacités du package
fmt
pour afficher la chaĂźne
Hello, World!
:
func Hello() { fmt.Println("Hello, World!") }
Maintenant, aprÚs la création du package d'
greet
, vous pouvez l'utiliser dans n'importe quel autre package. Créons un nouveau package dans lequel nous utiliserons le package de
greet
.
à savoir, nous allons créer un
example
package. Pour ce faire, nous partirons des mĂȘmes hypothĂšses Ă partir desquelles nous avons procĂ©dĂ©, en crĂ©ant le package de
greet
. Commencez par créer l'
example
dossier dans le dossier
gopherguides
:
âââ $GOPATH âââ src âââ github.com âââ gopherguides âââ example
CrĂ©ez maintenant un fichier qui est le point d'entrĂ©e du package. Nous considĂ©rons ce package comme un programme exĂ©cutable et non comme un package dont le code devrait ĂȘtre utilisĂ© dans d'autres packages. Les fichiers qui sont les points d'entrĂ©e des programmes sont gĂ©nĂ©ralement appelĂ©s
main.go
:
âââ $GOPATH âââ src âââ github.com âââ gopherguides âââ example âââ main.go
Ouvrez le fichier
main.go
dans l'éditeur et
main.go
code suivant, qui vous permet d'utiliser les capacités du package de
greet
:
package main import "github.com/gopherguides/greet" func main() { greet.Hello() }
Nous avons importé le package de
main.go
dans le fichier
main.go
, ce qui signifie que pour appeler la fonction déclarée dans ce package, nous devons utiliser la notation par points. Une notation par points est une construction dans laquelle un point est placé entre le nom du package et le nom de la ressource de ce package à utiliser. Par exemple, dans le package d'
greet
, la fonction
Hello
joue le rÎle d'une ressource. Si vous devez appeler cette fonction, la notation par points est utilisée
: greet.Hello()
.
Vous pouvez maintenant ouvrir le terminal et exécuter le programme:
go run main.go
AprÚs cela, le terminal affichera les éléments suivants:
Hello, World!
Voyons maintenant comment utiliser les variables déclarées dans les packages. Pour ce faire, ajoutez la déclaration de variable au
greet.go
:
package greet import "fmt" var Shark = "Sammy" func Hello() { fmt.Println("Hello, World!") }
Ouvrez le fichier
main.go
et ajoutez-y une ligne oĂč la fonction
fmt.Println()
est utilisée pour afficher la valeur de la variable
Shark
déclarée dans le
greet.go
. Ă savoir,
main.go
sous la forme suivante:
package main import ( "fmt" "github.com/gopherguides/greet" ) func main() { greet.Hello() fmt.Println(greet.Shark) }
Exécutez à nouveau le programme:
go run main.go
Maintenant, elle affichera les éléments suivants:
Hello, World! Sammy
Voyons maintenant comment déclarer des types dans des packages. Créez un type
Octopus
avec les champs
Name
et
Color
et créez une méthode de type. Cette méthode, lorsqu'elle est appelée, renvoie le contenu spécialement traité des champs
Octopus
.
greet.go
au formulaire suivant:
package greet import "fmt" var Shark = "Sammy" type Octopus struct { Name string Color string } func (o Octopus) String() string { return fmt.Sprintf("The octopus's name is %q and is the color %s.", o.Name, o.Color) } func Hello() { fmt.Println("Hello, World!") }
Maintenant, ouvrez
main.go
, créez une instance de la structure du nouveau type et référez-vous à sa méthode
String()
:
package main import ( "fmt" "github.com/gopherguides/greet" ) func main() { greet.Hello() fmt.Println(greet.Shark) oct := greet.Octopus{ Name: "Jesse", Color: "orange", } fmt.Println(oct.String()) }
AprÚs avoir créé une instance d'
Octopus
aide d'une construction qui ressemble Ă
oct := greet.Octopus
, vous pouvez accéder aux méthodes et propriétés du type à partir de l'
main.go
fichier
main.go
Cela, en particulier, vous permet d'utiliser la commande
oct.String()
située à la fin du fichier
main.go
sans recourir Ă
greet
. De plus, on peut, par exemple, se référer au champ de la structure
Color
utilisant la construction
oct.Color
. En mĂȘme temps, comme lorsque nous avons appelĂ© la mĂ©thode, nous n'accĂ©dons pas au message d'
greet
.
La méthode
String
du type
Octopus
utilise la fonction
fmt.Sprintf
pour former la phrase et renvoie, en utilisant
return
, le résultat, la chaßne, à l'appel de méthode (dans ce cas, cet endroit se trouve dans
main.go
).
Exécutez à nouveau le programme:
go run main.go
Il affichera les éléments suivants sur la console:
Hello, World! Sammy The octopus's name is "Jesse" and is the color orange.
Maintenant que nous avons équipé Octopus de la méthode
String
, nous avons un mĂ©canisme de sortie d'informations de type adaptĂ© Ă la rĂ©utilisation. Si Ă l'avenir vous devez changer le comportement de cette mĂ©thode, qui peut ĂȘtre utilisĂ©e dans de nombreux projets, il suffira d'Ă©diter une fois son code
greet.go
.
Exportation d'entité
Vous avez peut-ĂȘtre remarquĂ© que tout ce que nous avons travaillĂ© lors de l'accĂšs au package d'
greet
a des noms qui commencent par une majuscule. Go n'a pas de modificateurs d'accĂšs comme
public
,
private
ou
protected
, qui sont dans d'autres langues. La visibilité des entités pour les mécanismes externes est contrÎlée par le fait par quelle lettre, avec une petite ou une grande, commence leur nom. Par conséquent, les types, variables, fonctions dont les noms commencent par une majuscule sont disponibles en dehors du package actuel. Le code visible en dehors du package est appelé exporté.
Si vous équipez le type
Octopus
d'une nouvelle méthode appelée
reset
, cette mĂ©thode peut ĂȘtre appelĂ©e Ă partir du package de
main.go
, mais pas Ă partir du fichier
main.go
, qui est en dehors du package de
main.go
. Voici une version mise Ă jour
greet.go
:
package greet import "fmt" var Shark = "Sammy" type Octopus struct { Name string Color string } func (o Octopus) String() string { return fmt.Sprintf("The octopus's name is %q and is the color %s.", o.Name, o.Color) } func (o Octopus) reset() { o.Name = "" o.Color = "" } func Hello() { fmt.Println("Hello, World!") }
Essayons d'appeler
reset
depuis le fichier
main.go
:
package main import ( "fmt" "github.com/gopherguides/greet" ) func main() { greet.Hello() fmt.Println(greet.Shark) oct := greet.Octopus{ Name: "Jesse", Color: "orange", } fmt.Println(oct.String()) oct.reset() }
Cela entraĂźnera l'erreur de compilation suivante:
oct.reset undefined (cannot refer to unexported field or method greet.Octopus.reset)
Pour exporter la méthode de
reset
Octopus
, vous devez la renommer en remplaçant la premiÚre lettre, minuscule
r
, par une majuscule
R
Pour ce faire, nous
greet.go
:
package greet import "fmt" var Shark = "Sammy" type Octopus struct { Name string Color string } func (o Octopus) String() string { return fmt.Sprintf("The octopus's name is %q and is the color %s.", o.Name, o.Color) } func (o Octopus) Reset() { o.Name = "" o.Color = "" } func Hello() { fmt.Println("Hello, World!") }
Cela conduira au fait que nous pourrons appeler
Reset
partir d'autres packages et sans rencontrer de messages d'erreur:
package main import ( "fmt" "github.com/gopherguides/greet" ) func main() { greet.Hello() fmt.Println(greet.Shark) oct := greet.Octopus{ Name: "Jesse", Color: "orange", } fmt.Println(oct.String()) oct.Reset() fmt.Println(oct.String()) }
Exécutez le programme:
go run main.go
Voici ce qui arrive Ă la console:
Hello, World! Sammy The octopus's name is "Jesse" and is the color orange The octopus's name is "" and is the color .
En appelant la méthode
Reset
, nous avons effacé les champs
Name
et
Color
de notre instance
Octopus
. Par conséquent, lorsque vous appelez
String
, oĂč le contenu des champs
Name
et
Color
était précédemment affiché, rien ne s'affiche désormais.
Résumé
L'Ă©criture de packages Go n'est pas diffĂ©rente de l'Ă©criture de code Go standard. Cependant, placer le code du package dans leurs propres rĂ©pertoires permet d'isoler le code, qui peut ĂȘtre utilisĂ© dans n'importe quel autre projet Go. Ici, nous avons parlĂ© de la façon de dĂ©clarer des fonctions, des variables et des types dans des packages, examinĂ© comment utiliser ces entitĂ©s en dehors des packages et trouvĂ© oĂč stocker les packages conçus pour leur utilisation rĂ©pĂ©tĂ©e.
Chers lecteurs! Quels programmes écrivez-vous habituellement sur Go? Utilisez-vous des packages propriétaires?
