diff --git a/fr-fr/go-fr.html.markdown b/fr-fr/go-fr.html.markdown
index 31e1e92b..2ff5902f 100644
--- a/fr-fr/go-fr.html.markdown
+++ b/fr-fr/go-fr.html.markdown
@@ -2,7 +2,7 @@
name: Go
category: language
language: Go
-filename: learngo-fr.go
+filename: learngo.go
contributors:
- ["Sonia Keys", "https://github.com/soniakeys"]
- ["Christopher Bess", "https://github.com/cbess"]
@@ -10,21 +10,19 @@ contributors:
- ["Quint Guvernator", "https://github.com/qguv"]
- ["Jose Donizetti", "https://github.com/josedonizetti"]
- ["Alexej Friesen", "https://github.com/heyalexej"]
-translators:
- ["Jean-Philippe Monette", "http://blogue.jpmonette.net/"]
-lang: fr-fr
---
-Go a été créé dans l'optique de déveloper de façcon efficace. Ce n'est pas la
-dernière tendance en ce qui au développement, mais c'est la nouvelle façon de
-régler des défis réels de façcon rapide.
+Go a été créé dans l'optique de développer de façon efficace. Ce n'est pas la
+dernière tendance en ce qui est au développement, mais c'est la nouvelle façon
+de régler des défis réels de façon rapide.
Le langage possède des concepts familiers à la programmation impérative avec
typage. Il est rapide à compiler et exécuter, ajoute une concurrence facile à
-comprendre pour les processeurs multi coeurs d'aujourd'hui et apporte des
+comprendre, pour les processeurs multi coeurs d'aujourd'hui et apporte des
fonctionnalités facilitant le développement à grande échelle.
-Développer avec Go, c'est bénéficier d'une riche librairie standard et d'une
+Développer avec Go, c'est bénéficier d'une riche bibliothèque standard et d'une
communauté active.
```go
@@ -34,22 +32,22 @@ communauté active.
// Un paquet débute avec une clause "package"
// "Main" est un nom spécial déclarant un paquet de type exécutable plutôt
-// qu'une librairie
+// qu'une bibliothèque
package main
// "Import" déclare les paquets référencés dans ce fichier.
import (
- "fmt" // Un paquet dans la librairie standard.
+ "fmt" // Un paquet dans la bibliothèque standard.
"io/ioutil" // Implémente des fonctions utilitaires I/O.
- m "math" // Librairie mathématique utilisant un alias local "m".
+ m "math" // Bibliothèque mathématique utilisant un alias local "m".
"net/http" // Un serveur Web!
- "strconv" // Librairie pour convertir les chaînes de caractères.
+ "strconv" // Bibliothèque pour convertir les chaînes de caractères.
)
// Une définition de fonction. La fonction "main" est spéciale - c'est le point
-// d'entrée du binaire. Celle-ci est encapsulée par des accolades.
+// d'entrée du binaire.
func main() {
- // Println retourne une ligne à stdout.
+ // Println retournera la valeur à la console.
// Associez la fonction avec son paquet respectif, fmt.
fmt.Println("Hello world!")
@@ -78,7 +76,7 @@ func learnMultiple(x, y int) (sum, prod int) {
// Quelques types inclus et littéraux.
func learnTypes() {
- // Déclaration courte produit généralement le type désiré.
+ // Une déclaration courte infère généralement le type désiré.
str := "Learn Go!" // Type string.
s2 := `Une chaîne de caractères peut contenir des
@@ -89,7 +87,7 @@ sauts de ligne.` // Chaîne de caractère.
// unicode.
f := 3.14195 // float64, un nombre flottant IEEE-754 de 64-bit.
- c := 3 + 4i // complex128, représenté à l'interne par deux float64.
+ c := 3 + 4i // complex128, considéré comme deux float64 par le compilateur.
// Syntaxe "var" avec une valeur d'initialisation.
var u uint = 7 // Non signé, mais la taille dépend selon l'entier.
@@ -98,13 +96,13 @@ sauts de ligne.` // Chaîne de caractère.
// Conversion avec syntaxe courte.
n := byte('\n') // byte est un alias du type uint8.
- // Les tableaux ont des tailles fixes à la compilation.
+ // Les tableaux ont une taille fixe déclarée à la compilation.
var a4 [4]int // Un tableau de 4 ints, tous initialisés à 0.
a3 := [...]int{3, 1, 5} // Un tableau initialisé avec une taille fixe de 3
// éléments, contenant les valeurs 3, 1 et 5.
// Les slices ont des tailles dynamiques. Les tableaux et slices ont chacun
- // des avantages, mais les usages des slices sont plus communs.
+ // des avantages, mais les cas d'utilisation des slices sont plus fréquents.
s3 := []int{4, 5, 9} // Comparable à a3.
s4 := make([]int, 4) // Alloue un slice de 4 ints, initialisés à 0.
var d2 [][]float64 // Déclaration seulement, sans allocation de mémoire.
@@ -114,13 +112,13 @@ sauts de ligne.` // Chaîne de caractère.
// demande. Pour joindre un élément à une slice, la fonction standard append()
// est utilisée. Le premier argument est la slice à utiliser. Habituellement,
// la variable tableau est mise à jour sur place, voir ci-bas.
- s := []int{1, 2, 3} // Le résultat est une slice de taille 3.
+ s := []int{1, 2, 3} // Le résultat est une slice de taille 3.
s = append(s, 4, 5, 6) // Ajout de 3 valeurs. La taille est de 6.
- fmt.Println(s) // La valeur est maintenant de [1 2 3 4 5 6]
- // Pour ajouter une autre slice, au lieu d'utiliser une liste de valeurs
+ fmt.Println(s) // La valeur est de [1 2 3 4 5 6]
+
+ // Pour ajouter une slice à une autre, au lieu d'utiliser une liste de valeurs
// atomiques, il est possible de mettre en argument une référence de
- // slice littérale de cette façon, avec des points de suspension, signifiant
- // qu'il faut prendre les éléments de la slice et les ajouter à la slice s.
+ // slice littérale grâce aux points de suspension.
s = append(s, []int{7, 8, 9}...) // Le deuxième argument est une slice
// littérale.
fmt.Println(s) // La slice contient [1 2 3 4 5 6 7 8 9]
@@ -133,17 +131,19 @@ sauts de ligne.` // Chaîne de caractère.
m := map[string]int{"trois": 3, "quatre": 4}
m["un"] = 1
- // Les valeurs inutilisées sont des erreurs en Go.
- // Un tiret bas permet d'utiliser une variable, mais d'en jeter la valeur.
+ // Les valeurs inutilisées sont considérées comme des erreurs en Go.
+ // Un tiret bas permet d'ignorer une valeur inutilisée, évitant une erreur.
_, _, _, _, _, _, _, _, _, _ = str, s2, g, f, u, pi, n, a3, s4, bs
- // L'affichage est considéré comme une utilisation de la variable.
+
+ // Cependant, son affichage en console est considéré comme une utilisation,
+ // ce qui ne sera pas considéré comme une erreur à la compilation.
fmt.Println(s, c, a4, s3, d2, m)
learnFlowControl() // De retour dans le flux.
}
-// Il est possible, à l'opposée de plusieurs autres langages, à des fonctions
-// en go d'avoir des valeurs retournées avec nom.
+// Il est possible, à l'opposé de plusieurs autres langages, de retourner des
+// variables par leur nom à partir de fonctions.
// Assigner un nom à un type retourné par une fonction permet de retrouver sa
// valeur ainsi que d'utiliser le mot-clé "return" uniquement, sans plus.
func learnNamedReturns(x, y int) (z int) {
@@ -152,10 +152,11 @@ func learnNamedReturns(x, y int) (z int) {
}
// La récupération de la mémoire est automatique en Go. Le langage possède des
-// pointeurs, mais aucun pointeur arithmétique. Vous pouvez faire une erreur
-// avec un pointeur nil, mais pas en incrémentant un pointeur.
+// pointeurs, mais aucune arithmétique des pointeurs (*(a + b) en C). Vous
+// pouvez produire une erreur avec un pointeur nil, mais pas en incrémentant un
+// pointeur.
func learnMemory() (p, q *int) {
- // Les valeurs retournées définies p et q ont le type pointeur int.
+ // Les valeurs retournées p et q auront le type pointeur int.
p = new(int) // Fonction standard "new" alloue la mémoire.
// Le int alloué est initialisé à 0, p n'est plus nil.
s := make([]int, 20) // Alloue 20 ints en un seul bloc de mémoire.
@@ -169,11 +170,12 @@ func expensiveComputation() float64 {
}
func learnFlowControl() {
- // Bien que les "if" requiert des accolades, les parenthèses ne le sont pas.
+ // Bien que les "if" requièrent des accolades, les parenthèses ne sont pas
+ // nécessaires pour contenir le test booléen.
if true {
fmt.Println("voilà!")
}
- // Le formate est standardisé par la commande shell "go fmt."
+ // Le formatage du code est standardisé par la commande shell "go fmt."
if false {
// bing.
} else {
@@ -189,8 +191,9 @@ func learnFlowControl() {
case 43:
// Non-exécuté.
}
- // Comme les "if", "for" n'utilise pas de parenthèses.
- // Les variables déclarées dans "for" et "if" sont locales à leur portée.
+ // Comme les "if", les "for" n'utilisent pas de parenthèses.
+ // Les variables déclarées dans les "for" et les "if" sont locales à leur
+ // portée.
for x := 0; x < 3; x++ { // ++ est une incrémentation.
fmt.Println("itération ", x)
}
@@ -202,8 +205,8 @@ func learnFlowControl() {
continue // Non atteint.
}
- // Vous pouvez utiliser un "range" pour itérer dans un tableau, une slice, une
- // chaîne, une map ou un channel. Les "range" retournent un canal ou deux
+ // Vous pouvez utiliser une "range" pour itérer dans un tableau, une slice, une
+ // chaîne, une map ou un canal. Les "range" retournent un canal ou deux
// valeurs (tableau, slice, chaîne et map).
for key, value := range map[string]int{"une": 1, "deux": 2, "trois": 3} {
// pour chaque pair dans une map, affichage de la valeur et clé
@@ -215,35 +218,35 @@ func learnFlowControl() {
if y := expensiveComputation(); y > x {
x = y
}
- // Les fonctions littérales est une fermeture (closure).
+ // Les fonctions littérales sont des fermetures.
xBig := func() bool {
- return x > 10000 // Réfère à la variable x déclarée en haut du "switch".
+ return x > 10000
}
fmt.Println("xBig:", xBig()) // true (la valeur e^10 a été assignée à x).
x = 1.3e3 // Ceci fait x == 1300
fmt.Println("xBig:", xBig()) // Maintenant false.
- // De plus, les fonctions littérales peuvent être définies et appelée
- // sur la même ligne, agissant comme argument de fonctions, tant que:
+ // De plus, les fonctions littérales peuvent être définies et appelées
+ // sur la même ligne, agissant comme argument à cette fonction, tant que:
// a) la fonction littérale est appelée suite à (),
// b) le résultat correspond au type de l'argument.
- fmt.Println("Ajoute + multiplie deux nombres: ",
+ fmt.Println("Ajoute + multiplie deux nombres : ",
func(a, b int) int {
return (a + b) * 2
- }(10, 2)) // Appelé avec les arguments 10 et 2
- // => Ajoute + double deux nombres: 24
+ }(10, 2)) // Appelle la fonction avec les arguments 10 et 2
+ // => Ajoute + double deux nombres : 24
// Quand vous en aurez besoin, vous allez l'adorer.
goto love
love:
- learnFunctionFactory() // func retournant func correspond à fun(3)(3).
- learnDefer() // Un survol de cette instruction important.
- learnInterfaces() // Incontournable!
+ learnFunctionFactory() // func retournant func correspondant à fun(3)(3).
+ learnDefer() // Un survol de cette instruction importante.
+ learnInterfaces() // Incontournable !
}
func learnFunctionFactory() {
- // Les deux syntaxes sont identiques, bien que la seconde est plus pratique.
+ // Les deux syntaxes sont identiques, bien que la seconde soit plus pratique.
fmt.Println(sentenceFactory("été")("Une matinée d'", "agréable!"))
d := sentenceFactory("été")
@@ -287,12 +290,12 @@ func (p pair) String() string { // p s'appelle le "destinataire"
}
func learnInterfaces() {
- // La syntaxe avec accolade défini une "structure littérale". Ceci s'évalue
- // comme étant une strucutre. La syntaxe := déclare et initialise p comme
- // étant cette structure.
+ // La syntaxe avec accolade défini une "structure littérale". Celle-ci
+ // s'évalue comme étant une structure. La syntaxe := déclare et initialise p
+ // comme étant une instance.
p := pair{3, 4}
fmt.Println(p.String()) // Appelle la méthode String de p, de type pair.
- var i Stringer // Déclare i de l'interface de type Stringer.
+ var i Stringer // Déclare i instance de l'interface Stringer.
i = p // Valide, car pair implémente Stringer.
// Appelle la méthode String de i, de type Stringer. Retourne la même valeur
// que ci-haut.
@@ -307,9 +310,11 @@ func learnInterfaces() {
learnVariadicParams("apprentissage", "génial", "ici!")
}
-// Les fonctions peuvent avoir des paramètres variables.
+// Les fonctions peuvent être définie de façon à accepter un ou plusieurs
+// paramètres grâce aux points de suspension, offrant une flexibilité lors de
+// son appel.
func learnVariadicParams(myStrings ...interface{}) {
- // Itère chaque valeur du paramètre variable.
+ // Itère chaque paramètre dans la range.
// Le tiret bas sert à ignorer l'index retourné du tableau.
for _, param := range myStrings {
fmt.Println("paramètre:", param)
@@ -322,8 +327,8 @@ func learnVariadicParams(myStrings ...interface{}) {
}
func learnErrorHandling() {
- // ", ok" expression utilisée pour définir si quelque chose a fonctionné ou
- // non.
+ // ", ok" idiome utilisée pour définir si l'opération s'est déroulée avec
+ // succès ou non
m := map[int]string{3: "trois", 4: "quatre"}
if x, ok := m[1]; !ok { // ok sera faux, car 1 n'est pas dans la map.
fmt.Println("inexistant")
@@ -336,14 +341,14 @@ func learnErrorHandling() {
// retourne: 'strconv.ParseInt: parsing "non-int": invalid syntax'
fmt.Println(err)
}
- // Nous réviserons les interfaces un peu plus tard. Maintenant,
+ // Nous réviserons les interfaces un peu plus tard. Pour l'instant,
learnConcurrency()
}
// c est un canal, un objet permettant de communiquer en simultané de façon
-// sécuritaire.
+// sécurisée.
func inc(i int, c chan int) {
- c <- i + 1 // <- est l'opérateur "destination" quand un canal apparaît à
+ c <- i + 1 // <- est l'opérateur "envoi" quand un canal apparaît à
// gauche.
}
@@ -355,11 +360,11 @@ func learnConcurrency() {
// Démarrage de trois goroutines simultanées. Les nombres seront incrémentés
// simultanément, peut-être en paralèle si la machine le permet et configurée
// correctement. Les trois utilisent le même canal.
- go inc(0, c) // go est une déclaration démarrant une nouvelle goroutine.
+ go inc(0, c) // go est une instruction démarrant une nouvelle goroutine.
go inc(10, c)
go inc(-805, c)
// Lis et affiche trois résultats du canal - impossible de savoir dans quel
- // ordre!
+ // ordre !
fmt.Println(<-c, <-c, <-c) // Canal à droite, <- est l'opérateur de
// "réception".
@@ -374,13 +379,13 @@ func learnConcurrency() {
select {
case i := <-c: // La valeur reçue peut être assignée à une variable,
fmt.Printf("c'est un %T", i)
- case <-cs: // ou la valeur reçue peut être discartée.
+ case <-cs: // ou la valeur reçue peut être ignorée.
fmt.Println("c'est une chaîne")
case <-ccs: // Un canal vide, indisponible à la communication.
fmt.Println("ne surviendra pas.")
}
// À ce point, une valeur a été prise de c ou cs. L'une des deux goroutines
- // démarrée plus haut a complété, la seconde restera bloquée.
+ // démarrée plus haut a complétée, la seconde restera bloquée.
learnWebProgramming() // Go permet la programmation Web.
}
@@ -388,17 +393,18 @@ func learnConcurrency() {
// Une seule fonction du paquet http démarre un serveur Web.
func learnWebProgramming() {
- // Le premier paramètre de ListenAndServe is une adresse TCP à écouter.
+ // Le premier paramètre de ListenAndServe est une adresse TCP à écouter.
// Le second est une interface, de type http.Handler.
go func() {
err := http.ListenAndServe(":8080", pair{})
- fmt.Println(err) // n'ignorez pas les erreurs!
+ fmt.Println(err) // n'ignorez pas les erreurs !
}()
requestServer()
}
-// Fait de pair un http.Handler en implémentant sa seule méthode: ServeHTTP.
+// Implémente la méthode ServeHTTP de http.Handler à pair, la rendant compatible
+// avec les opérations utilisant l'interface http.Handler.
func (p pair) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// Répondez à une requête à l'aide de la méthode http.ResponseWriter.
w.Write([]byte("Vous avez appris Go en Y minutes!"))
@@ -421,7 +427,7 @@ Vous pourrez y suivre le tutoriel interactif et en apprendre beaucoup plus.
Une lecture de la documentation du langage est grandement conseillée. C'est
facile à lire et très court (comparé aux autres langages).
-Vous pouvez exécuter modifier le code sur [Go playground](https://play.golang.org/p/tnWMjr16Mm). Essayez de le modifier et de l'exécuter à partir de votre navigateur! Prennez en note que vous pouvez utiliser [https://play.golang.org](https://play.golang.org) comme un [REPL](https://en.wikipedia.org/wiki/Read-eval-print_loop) pour tester et coder dans votre navigateur, sans même avoir à installer Go.
+Vous pouvez exécuter et modifier le code sur [Go playground](https://play.golang.org/p/tnWMjr16Mm). Essayez de le modifier et de l'exécuter à partir de votre navigateur! Prennez en note que vous pouvez utiliser [https://play.golang.org](https://play.golang.org) comme un [REPL](https://en.wikipedia.org/wiki/Read-eval-print_loop) pour tester et coder dans votre navigateur, sans même avoir à installer Go.
Sur la liste de lecteur des étudiants de Go se trouve le [code source de la
librairie standard](http://golang.org/src/pkg/). Bien documentée, elle démontre