install-golang.png

Commencer avec Go

par Romain Barraud· ·

Commencer avec Go

Tutoriel original : https://go.dev/doc/tutorial/getting-started

Installation

Pour installer Golang il suffit d’aller sur la page principale du site go.dev Pour ma part je vais suivre le tutoriel pour installation sur mac.

On télécharge le binaire et ensuite il suffit de l’executer pour que go installe sa version sur le chemin /usr/local/go

Installation avec brew

brew install go

Ensuite pour vérifier que vous avez la bonne version faites un go version

Créer un petit REPL

Pour pouvoir tester le langage je souhaiterais me créer un package permettant de lancer mes différents tests. Pour cela je vais créer un package Repl dans le lequel j’aurais un main suivi de mes différents tests à lancer.

Repl/
├─ main.go
├─ test1.go
├─ test2.go
├─ testn.go

De cette façon je voulais pouvoir lancer mes différents tests sur le même main.

package main

func main() {
	helloWorld()
}

main.go

package main

import "fmt"

func helloWorld() {
	fmt.Println("Hello world")
}

helloworld.go

go run main.go helloworld.go

Résultat

go help

Remarque : On peut voir ici que la commande run permet de compile et de lancer un programme go.

Compiler et installer l’application

La commande “run”

Si on va plus loin il est possible d’avoir le détail de cette commande en faisant go help run.

Son utilisation est la suivante :

go run [build flags] [-exec xprog] package [arguments...]

Cette commande compile et lance le Go package nommé main Typiquement le package est spécifié en tant que liste de fichiers .go qui sont dans un répertoire. Il est tout à fait possible d’importer les fichiers via le path système ou via un pattern matching. Exemple 1 : go run . Exemple 2 : go run my/cmd

Essayons, changeons donc la commande go run main.go helloworld.go par go run . et go run repl

Ça part mal, il nous manque un fichier pour réaliser ça, pour l’instant nous allons le créer.

https://go.dev/blog/using-go-modules

go mod init repl

Maintenant les deux commandes semblent fonctionner et c’est plutôt chouette ça évite les bidouilles qu’on peut trouver avec ce genre de sujet : https://stackoverflow.com/questions/23695448/how-to-run-all-go-files-within-current-directory-through-the-command-line-mult

Par défaut donc, cette commande va lancer le binaire compilé directement.

Ce qui est important à retenir c’est que go run . ne génère pas les informations pour le debugger pour cela il faudra forcément passer par un build

Appeler du code venant d’un package externe

Parfois le code que vous souhaitez faire a déjà été fait par quelqu’un d’autre. Alors il est possible de voir pour récupérer un package qui possède cette fonction que vous souhaitez avoir dans votre code.

Pour cela on peut aller sur le site pkg.go.dev Il faut ensuite installer ce package dans notre projet, pour cela il faut juste utiliser la commande go get rsc.io/quote/v4

Cette commande mettra également à jour votre fichier mod.go et il créer également un fichier mod.sum.

Ce dernier est utilisé pour authentifier le module.

https://go.dev/blog/using-go-modules

https://golangbyexample.com/go-mod-sum-module/

Maintenant il faut créer le fichier qui va afficher la “citation”

package main

import (
	"fmt"

	"rsc.io/quote/v4"
)

func gettingStarted() {
	fmt.Println(quote.Go())
}

Et bien évidemment le rajouter dans le REPL:

package main

func main() {
	helloWorld()
	gettingStarted()
}

Il ne reste plus qu’à exécuter le code :

Téléchargement automatique avec “tidy”

Nous aurions pu nous passer du téléchargement du package et utiliser la commande go mod tidy

Pour montrer son fonctionnement je vais supprimer le package rsc.io/quote et laisser la commande mod tidy s’occuper du téléchargement de mon package.

Au préalable je nettoie le fichier go.mod en supprimant les requirements et je supprime le fichier go.sum Ensuite je peux executer la commande go mod tidy et le tour est joué