Quelques erreurs souvent écrites par les débutants en go

Les erreurs de package

Un des buts des concepteurs de golang était de garder un code clair et concis. Ce qui implique que le code inutile doit être nettoyé. L'objectif étant de produire un exécutable le plus petit possible et le plus rapide à compiler possible. Le code inutile doit donc être nettoyé et si le compilateur en détecte (par exemple, avec des imports de paquets inutilisés) il affichera un message d'erreur.

Oublier l'identificateur qualifié

La compilation de cet exemple de code qui devait afficher un message à l'écran n'est pas possible :
package main

import "fmt"

func main() {
	Println("Bonjour à tous")
}
En effet, les erreurs suivantes vont apparaître lors de la tentative de compilation :
 imported and not used: "fmt"
 undefined: Println
Il faut corriger le code de cette manière : fmt.Println("Bonjour à tous")

Importer un paquet inutile

Importer un package sans l'utiliser est interdit par le compilateur. Ainsi, le code suivant ne passera pas l'étape de compilation, parce que le paquet os n'est jamais utilisé.
package main

import "fmt"
import "os"

func main() {
	Println("Bonjour à tous")
}

Généralités

Ne pas respecter la casse

Il faut utiliser les noms exacts en respectant les majuscules et les minuscules. Ainsi, le code ci-dessous ne compilera pas parce que la fonction Printl est mal écrite.
package main

import "fmt"
import "os"

func main() {
	fmt.println("Bonjour à tous")
}
Si vous tentez de compiler cet exemple de code, vous obtiendrez les erreurs suivantes :
 cannot refer to unexported name fmt.println
 undefined: fmt.println
D'une manière générale, le compilateur go est sensible à la casse. Il faut donc utiliser le nom exact des fonctions, des mots-clés et instructions. Vous comprenez donc que les saisies suivantes sont interdites :
  • Package main
  • Import "fmt"
  • import "FMT"

Le bon usage du point-virgule

On peut écrire un point-virgule à la fin d'une ligne, mais cette écriture est optionnelle. En effet, le compilateur golang interprète le retour à la fin comme une fin de ligne. Cependant, si l'idée vous venait d'écrire deux instructions sur la même ligne (cela est fortement déconseillé, car cette pratique nuit à la compréhension du code). Vous devrez alors séparer les déclarations par un point-virgule. Le code ci-après montre les combinaisons autorisées par le compilateur.
package main

import (
	"fmt"
)

func main() {
	fmt.Println("A")
	fmt.Println("B");
	fmt.Println("C"); fmt.Println("D")
}
écrire fmt.Println("A");;;; ou import "fmt"; est autorisé, mais le code
import (
	"fmt";;
)
Provoque cette erreur :
 expected 'STRING', found ';'
Tandis qu'écrire import "fmt";; provoquerait cette erreur
empty top-level declaration

Et toutes les autres erreurs...

Il existe d'autres erreurs comme écrire package "main", package 'main', import 'fmt' ou import fmt qui provoqueront ce gerne d'erreurs :
 expected 'IDENT', found 'STRING' "main"
 illegal character literal
Et il y a de nombreuses autres erreurs qui reviennent toutes à la même chose. Go utilise un compilateur strict qui vous obligera à écrire un code de qualité.

Pour aller plus loin

Je vous conseille la lecture de mon article sur la gestion des paquets golang. Cet article concerne la directive import et il contient quelques astuces qui vous éviteront certaines erreurs décrites ici.

Étiquettes :   debuter   erreur 
Portrait de Benjamin BALET
Benjamin BALET
Consultant APM

Retrouvez mes cooordonées

Benjamin BALET sur viadeo






Vous aimerez aussi

Les lois de la réflexion

Une traduction du blog officiel de golang expliquant le mécanisme de la réflexion en Go.   Lire »

Import et nom de paquet golang

Comment inclure deux packages ayant le même nom ? Bénéficier des effets de bord ? Fusionner un paquet dans un autre package ?   Lire »

Comment écrire du code Go ?

Traduction d'une partie des spécifications officielles du langage Go, cet article explique comment développer en Go.   Lire »

Gobs le format natif d'échange de données en Go

Traduction d'un article du blog officiel expliquant comment échanger des données entre deux programmes golang grâce à un format natif   Lire »

Comment gérer efficacement les erreurs en golang ?

Préconisations officielles pour la gestion des erreurs dans un programme golang. Cet article complète les explications sur panic, defer et recover   Lire »

Commentaires

Soyez le premier à commenter cet article

Publier un commentaires

Tous les commentaires sont soumis à modération. Les balises HTML sont pour la plupart autorisées. Les liens contextuels et intéressants sont en follow.

(requis)
(requis)
(requis, mais non publié)
(recommandé si vous souhaitez être publié)