Golang 6 : Les packages partie 1

in #utopian-io7 years ago

Les Packages (partie I)

Qu'est ce que c'est un package?

image.png

Les packages sont utilisés pour organiser les codes sources pour une réutilisation efficace et une lisibilité meilleure.Les packages offrent une compartimentation du code, par conséquent, il devient plus facile de maintenir les applications en go.

Par exemple, on veut créer une application en go qui fait le traitement d'une image et qui offrent des options telles que recadrer, améliorer la netteté d'une image et d'autres options. Pour organiser cette application, on va regrouper tout le code relatif à une option dans un package. L'avantage est qu'une option pourrait faire appel à des fonctionnalités d'une autre option, pour cela, il suffit d'importer le package de l'option en question, par conséquent, le code devient plus simple à réutiliser.

La fonction main et main package

Toute application go executable doit contenir une fonction main. Cette fonction est le point de départ pour l'exécution. La fonction main doit être dans le main package.

La ligne de code qui indique qu'un fichier source particulier appartient à un package est package packagename, cela doit être dans la première ligne de tout fichier source en go.

On va créer une fonction main et un main package pour notre application. On crée un dossier dans le dossier src du go workspace et on le nomme geometrie, puis on crée un fichier geometrie.godans le dossier geometrie

On va écrire le code suivant dans geometrie.go

//geometrie.go
package main 

import "fmt"

func main() {  
    fmt.Println("les propriétés d'une forme géométrique")
}

La ligne du code package mainindique que le fichier appartient au main package. La déclaration import "packagename" est utilisée pour importer un package existant. Dans ce cas là, on importe le package fmtqui contient la méthode Println, puis il y'a une fonction main qui affiche les propriétés d'une forme géométrique

On compile le programme ci-dessus en tapant go install geometrie.Cette commande cherche dans le dossier geometrie le fichier avec la fonction main. Dans ce cas,geometrie.goest trouvé, il est alors compilé et un binaire nommé geometrie (geometrie.exe dans le cas de windows) est générée dans le dossier bin de workspace. La structure du workspace serait comme suivante:

src  
    geometrie
            gemometrie.go
bin  
    geometrie

On exécute le programme ci-dessus en tapant workspacepath/bin/geometrie , on remplace workspacepath par le chemin d'accès du go workspace. Cette commande exécute le binaire geometrie dans le dossier bin. Vous devez avoir comme sortie les propriétés d'une forme géométrique

Création d'un package personnalisé

On va structurer le code de telle façon que toutes les fonctionnalités relatives à un rectangle soient dans le package rectangle.

On va créer un package personnalisé rectangle qui contient des fonctions pour déterminer la surface et la diagonale d'un rectangle.

Les fichiers sources qui appartiennent à ce package doivent être placés dans des dossiers séparés. C'est une convention en Go pour donner le même nom du package à ce dossier.

On va créer un dossier qu'on va nommer rectangle dans le dossier geometrie . Tous les fichiers qui se trouvent dans le dossier rectangle doivent commencer par la ligne package rectangle.

On crée un fichier rectpropos.go dans le dossier rectangle qu'on vient de créer et on ajoute le code suivant.

//rectprops.go
package rectangle

import "math"

func Surface(len, wid float64) float64 {  
    surface := len * wid
    return surface
}

func Diagonal(len, wid float64) float64 {  
    diagonal := math.Sqrt((len * len) + (wid * wid))
    return diagonal
}

Dans le code ci-dessus, on a créé deux fonctions qui calculent Surface et Diagonal. On a importé la fonction Sqrt qui se trouve dans le package math.

Les noms des fonctions doivent toujours commencer par des majuscules .

Importer un package personnalisé

Pour utiliser un package personnalisé, on doit d'abord l'importer. import est le syntaxe pour importer un package. On doit indiquer le chemin d'accès au package personnalisé tout en respectant que le dossier src soit dans le workspace. La structure courante du dossier est:

src  
   geometrie
           geometrie.go
           rectangle
                    rectprops.go

La ligne import "geometrie/rectangle" va importer le package rectangle.

On va ajouter le code suivant à geometrie.go:

//geometrie.go
package main 

import (  
    "fmt"
    "geometrie/rectangle" //importer le package personnalisé
)

func main() {  
    var rectLen, rectWidth float64 = 6, 7
    fmt.Println("les propriétés  d'une forme géométrique")
        /*la fonction Surface du package rectangle est utilisée
        */
    fmt.Printf("surface du rectangle %.2f\n", rectangle.Area(rectLen, rectWidth))
        /*la fonction Diagonal du package rectangle est utilisée
        */
    fmt.Printf("la diagonale du rectangle %.2f ",rectangle.Diagonal(rectLen, rectWidth))
}

Le code ci-dessus importe le package rectangle et utilise les fonctions Surface et Diagonal de ce package pour trouver la surface et la diagonale d'un rectangle. Le format *.2f indique en Printf qu'on se contentera de deux chiffres après la virgule. La sortie de l'application est:

les propriétés d'une forme géométrique
area of rectangle 42.00  
diagonal of the rectangle 9.22 



Posted on Utopian.io - Rewarding Open Source Contributors

Sort:  

💙 Great post. Very good writing,i like this post 💙

       🎅 Thanks for Sharing  🎅

open music gif.gif

Thank you for the contribution. It has been approved.

You can contact us on Discord.
[utopian-moderator]

Hey @raptorjesus I am @utopian-io. I have just upvoted you!

Achievements

  • You have less than 500 followers. Just gave you a gift to help you succeed!
  • Seems like you contribute quite often. AMAZING!

Suggestions

  • Contribute more often to get higher and higher rewards. I wish to see you often!
  • Work on your followers to increase the votes/rewards. I follow what humans do and my vote is mainly based on that. Good luck!

Get Noticed!

  • Did you know project owners can manually vote with their own voting power or by voting power delegated to their projects? Ask the project owner to review your contributions!

Community-Driven Witness!

I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!

mooncryption-utopian-witness-gif

Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x