Le langage Go 2ème partie
description
Transcript of Le langage Go 2ème partie
Le langage Go
2egraveme partie
Rob Pikergooglecom
Traduction en franccedilais adaptation xaviermehaut gmailcom
(Version de Juin 2011)
Sommaire de la journeacutee
Exercicesdes questions
Types compositestructures arrays slices maps
Meacutethodestheyre not just for structs any more
Interfaces
Exercices
Des questions
Tableaux
Tableaux (arrays)Les tableaux en Go sont quelque peu diffeacuterents de ceux en C plus comme des tableaux en Pascal (Slices le prochain sujet se comportent un peu plus comme des tableaux C)
var ar [3]int deacuteclares ar comme eacutetant un tableau de 3 entiers initialiseacutes agrave zeacutero
La taille fait partie du type
La fonction native len renvoie la taille len(ar) == 3
Les tableaux sont des valeursLes tableaux sont des valeurs pas des pointeurs implicites comme en C Vous pouvez reacutecupeacuterer lrsquoadresse drsquoun tableau attribuer un pointeur agrave un tableau (par exemple pour le passer efficacement sans recopie agrave une fonction)
func f(a [3]int) fmtPrintln(a) func fp(a [3]int) fmtPrintln(a) func main()
var ar [3] intf(ar) passe une copie de arfp(ampar) passe un pointeur sur ar
Sortie(Print et consors reconnaissent les tableaux) [0 0 0]amp[0 0 0]
Les liteacuteraux tableauTous les types composite ont une syntaxe similaire pour la creacuteation des valeurs Pour les tableaux cela ressemble agrave
Tableau de 3 entiers[3]int1 2 3
Tableau de 10 entiers les trois premiers nrsquoeacutetant pas agrave zeacutero[10]int 1 2 3
Vous ne voulez pas compter Utilisez pour la initialiser la longueur[]int1 2 3
Vous ne voulez pas tous les initialiser Utilisez les paires keyvalue [10]int21 31 51 71
Pointeurs sur des liteacuteraux tableauVous pouvez reacutecupeacuterer lrsquoadresse drsquoun liteacuteral tableau afin drsquoavoir un pointeur sur une instance nouvellement creacuteeacutee
func fp(a [3]int) fmtPrintln(a) func main()
for i = 0 i lt 3 i++ fp(amp[3]inti ii iii)
Output
amp[0 0 0]amp[1 1 1]amp[2 4 8]
Les slices
Les slicesUne tranche (slice) est une reacutefeacuterence vers une section drsquoune tableau Les slices sont habituellement plus utiliseacutees que des tableaux pleins Une slice ne coute pas grand chose en place et performance (plus agrave venir)
Un type slice ressemble agrave un type tableau sans la taille var a []int
La fonction native len(a) retourne le nombre drsquoeacuteleacutements de la tranche
On creacutee une slice en tranchant un tableau ou une autre slice a = ar[79]
Les index valides de a seront alors 0 et 1 len(a)==2
Raccourcis pour les slices
Quand on creacutee une slice le premier index est par deacutefaut agrave 0 ar[n] signifie ar[0n]
Le second index est par deacutefaut len(arrayslice)ar[n] signifie ar[nlen(ar)]
Enfin pour creacuteer une slice drsquoun tableau ar[] signifie ar[0len(ar)]
Un slice reacutefeacuterence un tableau Conceptually
type Slice struct base elemType pointeur sur le 0egraveme eacuteleacutementlen int nb drsquoeacuteleacutements dans la slicecap int num drsquoeacuteleacutements disponibles
Arrayar
Slicea=ar[79]
7 1 5 4 3 8 7 2 11 5 3
base=ampar[7] len=2 cap=4
Construire une sliceLes liteacuteraux slice ressemblent agrave des liteacuteraux tableau sans la taille
var slice = []int12345Ce qui se passe crsquoest la creacuteation drsquoun tableau de longueur 5 suivie de la creacuteation drsquoune slice qui y fait reacutefeacuterence
Nous pouvons eacutegalement allouer une slice (et le tableau sous-jacent) avec la fonction native make
var s100 = make([]int 100) slice 100 ints
Pourquoi make et pas new Parce nous avons besoin de fabriquer une slice et pas seulement drsquoallouer de la meacutemoire Notez que make([]int 10) retourne []int tandis que new([]int) retourne []int
Utilisez make pour creacuteer des slices des maps et des channels (plus tard dans le cours)
La capaciteacute drsquoune sliceUne slice fait reacutefeacuterence agrave un tableau sous-jacent ainsi il peut y avoir des eacuteleacutements agrave lrsquoexpreacutemiteacute de la slice qui sont preacutesents dans le tableau
La fonction native cap (capacity) indique jusqursquoagrave quelle taille la slicepourrait encore grossir srsquoil le fallait
Apregravesvar ar = [10]int0123456789var a = ar[57] reacutefeacuterence vers le sous-tableau56
len(a) est 2 et cap(a) est 5 On peut reslicera = a[04] reacutefeacuterence vers le sous-tableau 5678
len(a) est deacutesormais 4 mais cap(a) est toujours 5
Retailler une sliceLes slices peuvent ecirctre utiliseacutees pour faire grossir un tableau
var sl = make([]int 0 100) len 0 cap 100
func appendToSlice(i int sl []int) []int if len(sl) == cap(sl) error() n = len(sl)sl = sl[0n+1] eacutetend drsquoune longueur de 1sl[n] = ireturn sl
Ainsi la longueur de sl est toujours le nombre drsquoeacuteleacutements mais il grossit avec le besoin Ce style est leacuteger et propre agrave Go
Les slices sont leacutegegraveresSentez vous libres drsquoallouer et de retailler des slices comme vous lrsquoentendez Elles sont leacutegegraveres pas de besoin drsquoallocation Souvenez-vous que ce sont des reacutefeacuterences ainsi le stockage sous-jacent peut ecirctre modifieacute
Par exemple les IO utilisent des slices pas des compteursfunc Read(fd int b []byte) intvar buffer [100]bytefor i = 0 i lt 100 i++
remplit le buffer un octet agrave la foisRead(fd buffer[ii+1]) pas drsquoallocation ici
Scinder un buffer
header data = buf[n] buf[n]
Les chaicircnes de caractegraveres peuvent ecirctre sliceacutees eacutegalement avec la mecircme efficaciteacute
Les dictionnaires (maps)
Les dictionnaires (Map)Les dictionnaires sont un autre type de reacutefeacuterence Ils sont deacuteclareacutes
de la faccedilon suivante var m map[string]float64
Ceci deacuteclare un dictionnaire indexeacute avec une clef de type string et une valeur de type float64
Crsquoest analogue agrave ce que lrsquoon trouve en C++type mapltstringfloat64gt (note the )
Etant donneacute un dictionnaire m len(m) retourne le nombre de clefs
Creacuteation drsquoun dictionnaireComme avec une slice une variable dictionnaire ne se reacutefegravere agrave rien vous devez mettre quelque chose dedans avant de lrsquoutiliser
Trois faccedilons de le faire 1) Liteacuteral liste de clefvaleur
m = map[string]float6411 pi31415
2) Creacuteationm = make(map[string]float64) make pas new
3) Affectationvar m1 map[string]float64m1 = m m1 and m now refer to same map
Indexation drsquoun dictionnaire(Les prochains exemples utilisent tous
m = map[string]float6411 pi31415)
Accegravede agrave un eacuteleacutement comme agrave une valeur si pas preacutesente renvoie une valeur zeacutero
one = m[1]zero = m[pas preacutesent] mets zero agrave 00
Stocke un eacuteleacutement
m[2] = 2m[2] = 3
Test de lrsquoexistencePour tester si une clef est peacutesente dans un dictionnaire nous pouvons utiliser une affectation multiple la forme ldquovirgule ok(comma ok)rdquo
m = map[string]float6411 pi31415var value float64var present boolvalue present = m[x]
or idiomatiquement
value ok = m[x] la forme comma ok
Si x est preacutesent dans le dictionnaire positionne le booleacuteen agrave true et la valeur et reacutecupegravere la valeur associeacute agrave la clef donneacutee Si non positionne le booleacuteen agrave false et renvoie la valeur zero pour le type consideacutereacute
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
Sommaire de la journeacutee
Exercicesdes questions
Types compositestructures arrays slices maps
Meacutethodestheyre not just for structs any more
Interfaces
Exercices
Des questions
Tableaux
Tableaux (arrays)Les tableaux en Go sont quelque peu diffeacuterents de ceux en C plus comme des tableaux en Pascal (Slices le prochain sujet se comportent un peu plus comme des tableaux C)
var ar [3]int deacuteclares ar comme eacutetant un tableau de 3 entiers initialiseacutes agrave zeacutero
La taille fait partie du type
La fonction native len renvoie la taille len(ar) == 3
Les tableaux sont des valeursLes tableaux sont des valeurs pas des pointeurs implicites comme en C Vous pouvez reacutecupeacuterer lrsquoadresse drsquoun tableau attribuer un pointeur agrave un tableau (par exemple pour le passer efficacement sans recopie agrave une fonction)
func f(a [3]int) fmtPrintln(a) func fp(a [3]int) fmtPrintln(a) func main()
var ar [3] intf(ar) passe une copie de arfp(ampar) passe un pointeur sur ar
Sortie(Print et consors reconnaissent les tableaux) [0 0 0]amp[0 0 0]
Les liteacuteraux tableauTous les types composite ont une syntaxe similaire pour la creacuteation des valeurs Pour les tableaux cela ressemble agrave
Tableau de 3 entiers[3]int1 2 3
Tableau de 10 entiers les trois premiers nrsquoeacutetant pas agrave zeacutero[10]int 1 2 3
Vous ne voulez pas compter Utilisez pour la initialiser la longueur[]int1 2 3
Vous ne voulez pas tous les initialiser Utilisez les paires keyvalue [10]int21 31 51 71
Pointeurs sur des liteacuteraux tableauVous pouvez reacutecupeacuterer lrsquoadresse drsquoun liteacuteral tableau afin drsquoavoir un pointeur sur une instance nouvellement creacuteeacutee
func fp(a [3]int) fmtPrintln(a) func main()
for i = 0 i lt 3 i++ fp(amp[3]inti ii iii)
Output
amp[0 0 0]amp[1 1 1]amp[2 4 8]
Les slices
Les slicesUne tranche (slice) est une reacutefeacuterence vers une section drsquoune tableau Les slices sont habituellement plus utiliseacutees que des tableaux pleins Une slice ne coute pas grand chose en place et performance (plus agrave venir)
Un type slice ressemble agrave un type tableau sans la taille var a []int
La fonction native len(a) retourne le nombre drsquoeacuteleacutements de la tranche
On creacutee une slice en tranchant un tableau ou une autre slice a = ar[79]
Les index valides de a seront alors 0 et 1 len(a)==2
Raccourcis pour les slices
Quand on creacutee une slice le premier index est par deacutefaut agrave 0 ar[n] signifie ar[0n]
Le second index est par deacutefaut len(arrayslice)ar[n] signifie ar[nlen(ar)]
Enfin pour creacuteer une slice drsquoun tableau ar[] signifie ar[0len(ar)]
Un slice reacutefeacuterence un tableau Conceptually
type Slice struct base elemType pointeur sur le 0egraveme eacuteleacutementlen int nb drsquoeacuteleacutements dans la slicecap int num drsquoeacuteleacutements disponibles
Arrayar
Slicea=ar[79]
7 1 5 4 3 8 7 2 11 5 3
base=ampar[7] len=2 cap=4
Construire une sliceLes liteacuteraux slice ressemblent agrave des liteacuteraux tableau sans la taille
var slice = []int12345Ce qui se passe crsquoest la creacuteation drsquoun tableau de longueur 5 suivie de la creacuteation drsquoune slice qui y fait reacutefeacuterence
Nous pouvons eacutegalement allouer une slice (et le tableau sous-jacent) avec la fonction native make
var s100 = make([]int 100) slice 100 ints
Pourquoi make et pas new Parce nous avons besoin de fabriquer une slice et pas seulement drsquoallouer de la meacutemoire Notez que make([]int 10) retourne []int tandis que new([]int) retourne []int
Utilisez make pour creacuteer des slices des maps et des channels (plus tard dans le cours)
La capaciteacute drsquoune sliceUne slice fait reacutefeacuterence agrave un tableau sous-jacent ainsi il peut y avoir des eacuteleacutements agrave lrsquoexpreacutemiteacute de la slice qui sont preacutesents dans le tableau
La fonction native cap (capacity) indique jusqursquoagrave quelle taille la slicepourrait encore grossir srsquoil le fallait
Apregravesvar ar = [10]int0123456789var a = ar[57] reacutefeacuterence vers le sous-tableau56
len(a) est 2 et cap(a) est 5 On peut reslicera = a[04] reacutefeacuterence vers le sous-tableau 5678
len(a) est deacutesormais 4 mais cap(a) est toujours 5
Retailler une sliceLes slices peuvent ecirctre utiliseacutees pour faire grossir un tableau
var sl = make([]int 0 100) len 0 cap 100
func appendToSlice(i int sl []int) []int if len(sl) == cap(sl) error() n = len(sl)sl = sl[0n+1] eacutetend drsquoune longueur de 1sl[n] = ireturn sl
Ainsi la longueur de sl est toujours le nombre drsquoeacuteleacutements mais il grossit avec le besoin Ce style est leacuteger et propre agrave Go
Les slices sont leacutegegraveresSentez vous libres drsquoallouer et de retailler des slices comme vous lrsquoentendez Elles sont leacutegegraveres pas de besoin drsquoallocation Souvenez-vous que ce sont des reacutefeacuterences ainsi le stockage sous-jacent peut ecirctre modifieacute
Par exemple les IO utilisent des slices pas des compteursfunc Read(fd int b []byte) intvar buffer [100]bytefor i = 0 i lt 100 i++
remplit le buffer un octet agrave la foisRead(fd buffer[ii+1]) pas drsquoallocation ici
Scinder un buffer
header data = buf[n] buf[n]
Les chaicircnes de caractegraveres peuvent ecirctre sliceacutees eacutegalement avec la mecircme efficaciteacute
Les dictionnaires (maps)
Les dictionnaires (Map)Les dictionnaires sont un autre type de reacutefeacuterence Ils sont deacuteclareacutes
de la faccedilon suivante var m map[string]float64
Ceci deacuteclare un dictionnaire indexeacute avec une clef de type string et une valeur de type float64
Crsquoest analogue agrave ce que lrsquoon trouve en C++type mapltstringfloat64gt (note the )
Etant donneacute un dictionnaire m len(m) retourne le nombre de clefs
Creacuteation drsquoun dictionnaireComme avec une slice une variable dictionnaire ne se reacutefegravere agrave rien vous devez mettre quelque chose dedans avant de lrsquoutiliser
Trois faccedilons de le faire 1) Liteacuteral liste de clefvaleur
m = map[string]float6411 pi31415
2) Creacuteationm = make(map[string]float64) make pas new
3) Affectationvar m1 map[string]float64m1 = m m1 and m now refer to same map
Indexation drsquoun dictionnaire(Les prochains exemples utilisent tous
m = map[string]float6411 pi31415)
Accegravede agrave un eacuteleacutement comme agrave une valeur si pas preacutesente renvoie une valeur zeacutero
one = m[1]zero = m[pas preacutesent] mets zero agrave 00
Stocke un eacuteleacutement
m[2] = 2m[2] = 3
Test de lrsquoexistencePour tester si une clef est peacutesente dans un dictionnaire nous pouvons utiliser une affectation multiple la forme ldquovirgule ok(comma ok)rdquo
m = map[string]float6411 pi31415var value float64var present boolvalue present = m[x]
or idiomatiquement
value ok = m[x] la forme comma ok
Si x est preacutesent dans le dictionnaire positionne le booleacuteen agrave true et la valeur et reacutecupegravere la valeur associeacute agrave la clef donneacutee Si non positionne le booleacuteen agrave false et renvoie la valeur zero pour le type consideacutereacute
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
Exercices
Des questions
Tableaux
Tableaux (arrays)Les tableaux en Go sont quelque peu diffeacuterents de ceux en C plus comme des tableaux en Pascal (Slices le prochain sujet se comportent un peu plus comme des tableaux C)
var ar [3]int deacuteclares ar comme eacutetant un tableau de 3 entiers initialiseacutes agrave zeacutero
La taille fait partie du type
La fonction native len renvoie la taille len(ar) == 3
Les tableaux sont des valeursLes tableaux sont des valeurs pas des pointeurs implicites comme en C Vous pouvez reacutecupeacuterer lrsquoadresse drsquoun tableau attribuer un pointeur agrave un tableau (par exemple pour le passer efficacement sans recopie agrave une fonction)
func f(a [3]int) fmtPrintln(a) func fp(a [3]int) fmtPrintln(a) func main()
var ar [3] intf(ar) passe une copie de arfp(ampar) passe un pointeur sur ar
Sortie(Print et consors reconnaissent les tableaux) [0 0 0]amp[0 0 0]
Les liteacuteraux tableauTous les types composite ont une syntaxe similaire pour la creacuteation des valeurs Pour les tableaux cela ressemble agrave
Tableau de 3 entiers[3]int1 2 3
Tableau de 10 entiers les trois premiers nrsquoeacutetant pas agrave zeacutero[10]int 1 2 3
Vous ne voulez pas compter Utilisez pour la initialiser la longueur[]int1 2 3
Vous ne voulez pas tous les initialiser Utilisez les paires keyvalue [10]int21 31 51 71
Pointeurs sur des liteacuteraux tableauVous pouvez reacutecupeacuterer lrsquoadresse drsquoun liteacuteral tableau afin drsquoavoir un pointeur sur une instance nouvellement creacuteeacutee
func fp(a [3]int) fmtPrintln(a) func main()
for i = 0 i lt 3 i++ fp(amp[3]inti ii iii)
Output
amp[0 0 0]amp[1 1 1]amp[2 4 8]
Les slices
Les slicesUne tranche (slice) est une reacutefeacuterence vers une section drsquoune tableau Les slices sont habituellement plus utiliseacutees que des tableaux pleins Une slice ne coute pas grand chose en place et performance (plus agrave venir)
Un type slice ressemble agrave un type tableau sans la taille var a []int
La fonction native len(a) retourne le nombre drsquoeacuteleacutements de la tranche
On creacutee une slice en tranchant un tableau ou une autre slice a = ar[79]
Les index valides de a seront alors 0 et 1 len(a)==2
Raccourcis pour les slices
Quand on creacutee une slice le premier index est par deacutefaut agrave 0 ar[n] signifie ar[0n]
Le second index est par deacutefaut len(arrayslice)ar[n] signifie ar[nlen(ar)]
Enfin pour creacuteer une slice drsquoun tableau ar[] signifie ar[0len(ar)]
Un slice reacutefeacuterence un tableau Conceptually
type Slice struct base elemType pointeur sur le 0egraveme eacuteleacutementlen int nb drsquoeacuteleacutements dans la slicecap int num drsquoeacuteleacutements disponibles
Arrayar
Slicea=ar[79]
7 1 5 4 3 8 7 2 11 5 3
base=ampar[7] len=2 cap=4
Construire une sliceLes liteacuteraux slice ressemblent agrave des liteacuteraux tableau sans la taille
var slice = []int12345Ce qui se passe crsquoest la creacuteation drsquoun tableau de longueur 5 suivie de la creacuteation drsquoune slice qui y fait reacutefeacuterence
Nous pouvons eacutegalement allouer une slice (et le tableau sous-jacent) avec la fonction native make
var s100 = make([]int 100) slice 100 ints
Pourquoi make et pas new Parce nous avons besoin de fabriquer une slice et pas seulement drsquoallouer de la meacutemoire Notez que make([]int 10) retourne []int tandis que new([]int) retourne []int
Utilisez make pour creacuteer des slices des maps et des channels (plus tard dans le cours)
La capaciteacute drsquoune sliceUne slice fait reacutefeacuterence agrave un tableau sous-jacent ainsi il peut y avoir des eacuteleacutements agrave lrsquoexpreacutemiteacute de la slice qui sont preacutesents dans le tableau
La fonction native cap (capacity) indique jusqursquoagrave quelle taille la slicepourrait encore grossir srsquoil le fallait
Apregravesvar ar = [10]int0123456789var a = ar[57] reacutefeacuterence vers le sous-tableau56
len(a) est 2 et cap(a) est 5 On peut reslicera = a[04] reacutefeacuterence vers le sous-tableau 5678
len(a) est deacutesormais 4 mais cap(a) est toujours 5
Retailler une sliceLes slices peuvent ecirctre utiliseacutees pour faire grossir un tableau
var sl = make([]int 0 100) len 0 cap 100
func appendToSlice(i int sl []int) []int if len(sl) == cap(sl) error() n = len(sl)sl = sl[0n+1] eacutetend drsquoune longueur de 1sl[n] = ireturn sl
Ainsi la longueur de sl est toujours le nombre drsquoeacuteleacutements mais il grossit avec le besoin Ce style est leacuteger et propre agrave Go
Les slices sont leacutegegraveresSentez vous libres drsquoallouer et de retailler des slices comme vous lrsquoentendez Elles sont leacutegegraveres pas de besoin drsquoallocation Souvenez-vous que ce sont des reacutefeacuterences ainsi le stockage sous-jacent peut ecirctre modifieacute
Par exemple les IO utilisent des slices pas des compteursfunc Read(fd int b []byte) intvar buffer [100]bytefor i = 0 i lt 100 i++
remplit le buffer un octet agrave la foisRead(fd buffer[ii+1]) pas drsquoallocation ici
Scinder un buffer
header data = buf[n] buf[n]
Les chaicircnes de caractegraveres peuvent ecirctre sliceacutees eacutegalement avec la mecircme efficaciteacute
Les dictionnaires (maps)
Les dictionnaires (Map)Les dictionnaires sont un autre type de reacutefeacuterence Ils sont deacuteclareacutes
de la faccedilon suivante var m map[string]float64
Ceci deacuteclare un dictionnaire indexeacute avec une clef de type string et une valeur de type float64
Crsquoest analogue agrave ce que lrsquoon trouve en C++type mapltstringfloat64gt (note the )
Etant donneacute un dictionnaire m len(m) retourne le nombre de clefs
Creacuteation drsquoun dictionnaireComme avec une slice une variable dictionnaire ne se reacutefegravere agrave rien vous devez mettre quelque chose dedans avant de lrsquoutiliser
Trois faccedilons de le faire 1) Liteacuteral liste de clefvaleur
m = map[string]float6411 pi31415
2) Creacuteationm = make(map[string]float64) make pas new
3) Affectationvar m1 map[string]float64m1 = m m1 and m now refer to same map
Indexation drsquoun dictionnaire(Les prochains exemples utilisent tous
m = map[string]float6411 pi31415)
Accegravede agrave un eacuteleacutement comme agrave une valeur si pas preacutesente renvoie une valeur zeacutero
one = m[1]zero = m[pas preacutesent] mets zero agrave 00
Stocke un eacuteleacutement
m[2] = 2m[2] = 3
Test de lrsquoexistencePour tester si une clef est peacutesente dans un dictionnaire nous pouvons utiliser une affectation multiple la forme ldquovirgule ok(comma ok)rdquo
m = map[string]float6411 pi31415var value float64var present boolvalue present = m[x]
or idiomatiquement
value ok = m[x] la forme comma ok
Si x est preacutesent dans le dictionnaire positionne le booleacuteen agrave true et la valeur et reacutecupegravere la valeur associeacute agrave la clef donneacutee Si non positionne le booleacuteen agrave false et renvoie la valeur zero pour le type consideacutereacute
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
Tableaux
Tableaux (arrays)Les tableaux en Go sont quelque peu diffeacuterents de ceux en C plus comme des tableaux en Pascal (Slices le prochain sujet se comportent un peu plus comme des tableaux C)
var ar [3]int deacuteclares ar comme eacutetant un tableau de 3 entiers initialiseacutes agrave zeacutero
La taille fait partie du type
La fonction native len renvoie la taille len(ar) == 3
Les tableaux sont des valeursLes tableaux sont des valeurs pas des pointeurs implicites comme en C Vous pouvez reacutecupeacuterer lrsquoadresse drsquoun tableau attribuer un pointeur agrave un tableau (par exemple pour le passer efficacement sans recopie agrave une fonction)
func f(a [3]int) fmtPrintln(a) func fp(a [3]int) fmtPrintln(a) func main()
var ar [3] intf(ar) passe une copie de arfp(ampar) passe un pointeur sur ar
Sortie(Print et consors reconnaissent les tableaux) [0 0 0]amp[0 0 0]
Les liteacuteraux tableauTous les types composite ont une syntaxe similaire pour la creacuteation des valeurs Pour les tableaux cela ressemble agrave
Tableau de 3 entiers[3]int1 2 3
Tableau de 10 entiers les trois premiers nrsquoeacutetant pas agrave zeacutero[10]int 1 2 3
Vous ne voulez pas compter Utilisez pour la initialiser la longueur[]int1 2 3
Vous ne voulez pas tous les initialiser Utilisez les paires keyvalue [10]int21 31 51 71
Pointeurs sur des liteacuteraux tableauVous pouvez reacutecupeacuterer lrsquoadresse drsquoun liteacuteral tableau afin drsquoavoir un pointeur sur une instance nouvellement creacuteeacutee
func fp(a [3]int) fmtPrintln(a) func main()
for i = 0 i lt 3 i++ fp(amp[3]inti ii iii)
Output
amp[0 0 0]amp[1 1 1]amp[2 4 8]
Les slices
Les slicesUne tranche (slice) est une reacutefeacuterence vers une section drsquoune tableau Les slices sont habituellement plus utiliseacutees que des tableaux pleins Une slice ne coute pas grand chose en place et performance (plus agrave venir)
Un type slice ressemble agrave un type tableau sans la taille var a []int
La fonction native len(a) retourne le nombre drsquoeacuteleacutements de la tranche
On creacutee une slice en tranchant un tableau ou une autre slice a = ar[79]
Les index valides de a seront alors 0 et 1 len(a)==2
Raccourcis pour les slices
Quand on creacutee une slice le premier index est par deacutefaut agrave 0 ar[n] signifie ar[0n]
Le second index est par deacutefaut len(arrayslice)ar[n] signifie ar[nlen(ar)]
Enfin pour creacuteer une slice drsquoun tableau ar[] signifie ar[0len(ar)]
Un slice reacutefeacuterence un tableau Conceptually
type Slice struct base elemType pointeur sur le 0egraveme eacuteleacutementlen int nb drsquoeacuteleacutements dans la slicecap int num drsquoeacuteleacutements disponibles
Arrayar
Slicea=ar[79]
7 1 5 4 3 8 7 2 11 5 3
base=ampar[7] len=2 cap=4
Construire une sliceLes liteacuteraux slice ressemblent agrave des liteacuteraux tableau sans la taille
var slice = []int12345Ce qui se passe crsquoest la creacuteation drsquoun tableau de longueur 5 suivie de la creacuteation drsquoune slice qui y fait reacutefeacuterence
Nous pouvons eacutegalement allouer une slice (et le tableau sous-jacent) avec la fonction native make
var s100 = make([]int 100) slice 100 ints
Pourquoi make et pas new Parce nous avons besoin de fabriquer une slice et pas seulement drsquoallouer de la meacutemoire Notez que make([]int 10) retourne []int tandis que new([]int) retourne []int
Utilisez make pour creacuteer des slices des maps et des channels (plus tard dans le cours)
La capaciteacute drsquoune sliceUne slice fait reacutefeacuterence agrave un tableau sous-jacent ainsi il peut y avoir des eacuteleacutements agrave lrsquoexpreacutemiteacute de la slice qui sont preacutesents dans le tableau
La fonction native cap (capacity) indique jusqursquoagrave quelle taille la slicepourrait encore grossir srsquoil le fallait
Apregravesvar ar = [10]int0123456789var a = ar[57] reacutefeacuterence vers le sous-tableau56
len(a) est 2 et cap(a) est 5 On peut reslicera = a[04] reacutefeacuterence vers le sous-tableau 5678
len(a) est deacutesormais 4 mais cap(a) est toujours 5
Retailler une sliceLes slices peuvent ecirctre utiliseacutees pour faire grossir un tableau
var sl = make([]int 0 100) len 0 cap 100
func appendToSlice(i int sl []int) []int if len(sl) == cap(sl) error() n = len(sl)sl = sl[0n+1] eacutetend drsquoune longueur de 1sl[n] = ireturn sl
Ainsi la longueur de sl est toujours le nombre drsquoeacuteleacutements mais il grossit avec le besoin Ce style est leacuteger et propre agrave Go
Les slices sont leacutegegraveresSentez vous libres drsquoallouer et de retailler des slices comme vous lrsquoentendez Elles sont leacutegegraveres pas de besoin drsquoallocation Souvenez-vous que ce sont des reacutefeacuterences ainsi le stockage sous-jacent peut ecirctre modifieacute
Par exemple les IO utilisent des slices pas des compteursfunc Read(fd int b []byte) intvar buffer [100]bytefor i = 0 i lt 100 i++
remplit le buffer un octet agrave la foisRead(fd buffer[ii+1]) pas drsquoallocation ici
Scinder un buffer
header data = buf[n] buf[n]
Les chaicircnes de caractegraveres peuvent ecirctre sliceacutees eacutegalement avec la mecircme efficaciteacute
Les dictionnaires (maps)
Les dictionnaires (Map)Les dictionnaires sont un autre type de reacutefeacuterence Ils sont deacuteclareacutes
de la faccedilon suivante var m map[string]float64
Ceci deacuteclare un dictionnaire indexeacute avec une clef de type string et une valeur de type float64
Crsquoest analogue agrave ce que lrsquoon trouve en C++type mapltstringfloat64gt (note the )
Etant donneacute un dictionnaire m len(m) retourne le nombre de clefs
Creacuteation drsquoun dictionnaireComme avec une slice une variable dictionnaire ne se reacutefegravere agrave rien vous devez mettre quelque chose dedans avant de lrsquoutiliser
Trois faccedilons de le faire 1) Liteacuteral liste de clefvaleur
m = map[string]float6411 pi31415
2) Creacuteationm = make(map[string]float64) make pas new
3) Affectationvar m1 map[string]float64m1 = m m1 and m now refer to same map
Indexation drsquoun dictionnaire(Les prochains exemples utilisent tous
m = map[string]float6411 pi31415)
Accegravede agrave un eacuteleacutement comme agrave une valeur si pas preacutesente renvoie une valeur zeacutero
one = m[1]zero = m[pas preacutesent] mets zero agrave 00
Stocke un eacuteleacutement
m[2] = 2m[2] = 3
Test de lrsquoexistencePour tester si une clef est peacutesente dans un dictionnaire nous pouvons utiliser une affectation multiple la forme ldquovirgule ok(comma ok)rdquo
m = map[string]float6411 pi31415var value float64var present boolvalue present = m[x]
or idiomatiquement
value ok = m[x] la forme comma ok
Si x est preacutesent dans le dictionnaire positionne le booleacuteen agrave true et la valeur et reacutecupegravere la valeur associeacute agrave la clef donneacutee Si non positionne le booleacuteen agrave false et renvoie la valeur zero pour le type consideacutereacute
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
Tableaux (arrays)Les tableaux en Go sont quelque peu diffeacuterents de ceux en C plus comme des tableaux en Pascal (Slices le prochain sujet se comportent un peu plus comme des tableaux C)
var ar [3]int deacuteclares ar comme eacutetant un tableau de 3 entiers initialiseacutes agrave zeacutero
La taille fait partie du type
La fonction native len renvoie la taille len(ar) == 3
Les tableaux sont des valeursLes tableaux sont des valeurs pas des pointeurs implicites comme en C Vous pouvez reacutecupeacuterer lrsquoadresse drsquoun tableau attribuer un pointeur agrave un tableau (par exemple pour le passer efficacement sans recopie agrave une fonction)
func f(a [3]int) fmtPrintln(a) func fp(a [3]int) fmtPrintln(a) func main()
var ar [3] intf(ar) passe une copie de arfp(ampar) passe un pointeur sur ar
Sortie(Print et consors reconnaissent les tableaux) [0 0 0]amp[0 0 0]
Les liteacuteraux tableauTous les types composite ont une syntaxe similaire pour la creacuteation des valeurs Pour les tableaux cela ressemble agrave
Tableau de 3 entiers[3]int1 2 3
Tableau de 10 entiers les trois premiers nrsquoeacutetant pas agrave zeacutero[10]int 1 2 3
Vous ne voulez pas compter Utilisez pour la initialiser la longueur[]int1 2 3
Vous ne voulez pas tous les initialiser Utilisez les paires keyvalue [10]int21 31 51 71
Pointeurs sur des liteacuteraux tableauVous pouvez reacutecupeacuterer lrsquoadresse drsquoun liteacuteral tableau afin drsquoavoir un pointeur sur une instance nouvellement creacuteeacutee
func fp(a [3]int) fmtPrintln(a) func main()
for i = 0 i lt 3 i++ fp(amp[3]inti ii iii)
Output
amp[0 0 0]amp[1 1 1]amp[2 4 8]
Les slices
Les slicesUne tranche (slice) est une reacutefeacuterence vers une section drsquoune tableau Les slices sont habituellement plus utiliseacutees que des tableaux pleins Une slice ne coute pas grand chose en place et performance (plus agrave venir)
Un type slice ressemble agrave un type tableau sans la taille var a []int
La fonction native len(a) retourne le nombre drsquoeacuteleacutements de la tranche
On creacutee une slice en tranchant un tableau ou une autre slice a = ar[79]
Les index valides de a seront alors 0 et 1 len(a)==2
Raccourcis pour les slices
Quand on creacutee une slice le premier index est par deacutefaut agrave 0 ar[n] signifie ar[0n]
Le second index est par deacutefaut len(arrayslice)ar[n] signifie ar[nlen(ar)]
Enfin pour creacuteer une slice drsquoun tableau ar[] signifie ar[0len(ar)]
Un slice reacutefeacuterence un tableau Conceptually
type Slice struct base elemType pointeur sur le 0egraveme eacuteleacutementlen int nb drsquoeacuteleacutements dans la slicecap int num drsquoeacuteleacutements disponibles
Arrayar
Slicea=ar[79]
7 1 5 4 3 8 7 2 11 5 3
base=ampar[7] len=2 cap=4
Construire une sliceLes liteacuteraux slice ressemblent agrave des liteacuteraux tableau sans la taille
var slice = []int12345Ce qui se passe crsquoest la creacuteation drsquoun tableau de longueur 5 suivie de la creacuteation drsquoune slice qui y fait reacutefeacuterence
Nous pouvons eacutegalement allouer une slice (et le tableau sous-jacent) avec la fonction native make
var s100 = make([]int 100) slice 100 ints
Pourquoi make et pas new Parce nous avons besoin de fabriquer une slice et pas seulement drsquoallouer de la meacutemoire Notez que make([]int 10) retourne []int tandis que new([]int) retourne []int
Utilisez make pour creacuteer des slices des maps et des channels (plus tard dans le cours)
La capaciteacute drsquoune sliceUne slice fait reacutefeacuterence agrave un tableau sous-jacent ainsi il peut y avoir des eacuteleacutements agrave lrsquoexpreacutemiteacute de la slice qui sont preacutesents dans le tableau
La fonction native cap (capacity) indique jusqursquoagrave quelle taille la slicepourrait encore grossir srsquoil le fallait
Apregravesvar ar = [10]int0123456789var a = ar[57] reacutefeacuterence vers le sous-tableau56
len(a) est 2 et cap(a) est 5 On peut reslicera = a[04] reacutefeacuterence vers le sous-tableau 5678
len(a) est deacutesormais 4 mais cap(a) est toujours 5
Retailler une sliceLes slices peuvent ecirctre utiliseacutees pour faire grossir un tableau
var sl = make([]int 0 100) len 0 cap 100
func appendToSlice(i int sl []int) []int if len(sl) == cap(sl) error() n = len(sl)sl = sl[0n+1] eacutetend drsquoune longueur de 1sl[n] = ireturn sl
Ainsi la longueur de sl est toujours le nombre drsquoeacuteleacutements mais il grossit avec le besoin Ce style est leacuteger et propre agrave Go
Les slices sont leacutegegraveresSentez vous libres drsquoallouer et de retailler des slices comme vous lrsquoentendez Elles sont leacutegegraveres pas de besoin drsquoallocation Souvenez-vous que ce sont des reacutefeacuterences ainsi le stockage sous-jacent peut ecirctre modifieacute
Par exemple les IO utilisent des slices pas des compteursfunc Read(fd int b []byte) intvar buffer [100]bytefor i = 0 i lt 100 i++
remplit le buffer un octet agrave la foisRead(fd buffer[ii+1]) pas drsquoallocation ici
Scinder un buffer
header data = buf[n] buf[n]
Les chaicircnes de caractegraveres peuvent ecirctre sliceacutees eacutegalement avec la mecircme efficaciteacute
Les dictionnaires (maps)
Les dictionnaires (Map)Les dictionnaires sont un autre type de reacutefeacuterence Ils sont deacuteclareacutes
de la faccedilon suivante var m map[string]float64
Ceci deacuteclare un dictionnaire indexeacute avec une clef de type string et une valeur de type float64
Crsquoest analogue agrave ce que lrsquoon trouve en C++type mapltstringfloat64gt (note the )
Etant donneacute un dictionnaire m len(m) retourne le nombre de clefs
Creacuteation drsquoun dictionnaireComme avec une slice une variable dictionnaire ne se reacutefegravere agrave rien vous devez mettre quelque chose dedans avant de lrsquoutiliser
Trois faccedilons de le faire 1) Liteacuteral liste de clefvaleur
m = map[string]float6411 pi31415
2) Creacuteationm = make(map[string]float64) make pas new
3) Affectationvar m1 map[string]float64m1 = m m1 and m now refer to same map
Indexation drsquoun dictionnaire(Les prochains exemples utilisent tous
m = map[string]float6411 pi31415)
Accegravede agrave un eacuteleacutement comme agrave une valeur si pas preacutesente renvoie une valeur zeacutero
one = m[1]zero = m[pas preacutesent] mets zero agrave 00
Stocke un eacuteleacutement
m[2] = 2m[2] = 3
Test de lrsquoexistencePour tester si une clef est peacutesente dans un dictionnaire nous pouvons utiliser une affectation multiple la forme ldquovirgule ok(comma ok)rdquo
m = map[string]float6411 pi31415var value float64var present boolvalue present = m[x]
or idiomatiquement
value ok = m[x] la forme comma ok
Si x est preacutesent dans le dictionnaire positionne le booleacuteen agrave true et la valeur et reacutecupegravere la valeur associeacute agrave la clef donneacutee Si non positionne le booleacuteen agrave false et renvoie la valeur zero pour le type consideacutereacute
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
Les tableaux sont des valeursLes tableaux sont des valeurs pas des pointeurs implicites comme en C Vous pouvez reacutecupeacuterer lrsquoadresse drsquoun tableau attribuer un pointeur agrave un tableau (par exemple pour le passer efficacement sans recopie agrave une fonction)
func f(a [3]int) fmtPrintln(a) func fp(a [3]int) fmtPrintln(a) func main()
var ar [3] intf(ar) passe une copie de arfp(ampar) passe un pointeur sur ar
Sortie(Print et consors reconnaissent les tableaux) [0 0 0]amp[0 0 0]
Les liteacuteraux tableauTous les types composite ont une syntaxe similaire pour la creacuteation des valeurs Pour les tableaux cela ressemble agrave
Tableau de 3 entiers[3]int1 2 3
Tableau de 10 entiers les trois premiers nrsquoeacutetant pas agrave zeacutero[10]int 1 2 3
Vous ne voulez pas compter Utilisez pour la initialiser la longueur[]int1 2 3
Vous ne voulez pas tous les initialiser Utilisez les paires keyvalue [10]int21 31 51 71
Pointeurs sur des liteacuteraux tableauVous pouvez reacutecupeacuterer lrsquoadresse drsquoun liteacuteral tableau afin drsquoavoir un pointeur sur une instance nouvellement creacuteeacutee
func fp(a [3]int) fmtPrintln(a) func main()
for i = 0 i lt 3 i++ fp(amp[3]inti ii iii)
Output
amp[0 0 0]amp[1 1 1]amp[2 4 8]
Les slices
Les slicesUne tranche (slice) est une reacutefeacuterence vers une section drsquoune tableau Les slices sont habituellement plus utiliseacutees que des tableaux pleins Une slice ne coute pas grand chose en place et performance (plus agrave venir)
Un type slice ressemble agrave un type tableau sans la taille var a []int
La fonction native len(a) retourne le nombre drsquoeacuteleacutements de la tranche
On creacutee une slice en tranchant un tableau ou une autre slice a = ar[79]
Les index valides de a seront alors 0 et 1 len(a)==2
Raccourcis pour les slices
Quand on creacutee une slice le premier index est par deacutefaut agrave 0 ar[n] signifie ar[0n]
Le second index est par deacutefaut len(arrayslice)ar[n] signifie ar[nlen(ar)]
Enfin pour creacuteer une slice drsquoun tableau ar[] signifie ar[0len(ar)]
Un slice reacutefeacuterence un tableau Conceptually
type Slice struct base elemType pointeur sur le 0egraveme eacuteleacutementlen int nb drsquoeacuteleacutements dans la slicecap int num drsquoeacuteleacutements disponibles
Arrayar
Slicea=ar[79]
7 1 5 4 3 8 7 2 11 5 3
base=ampar[7] len=2 cap=4
Construire une sliceLes liteacuteraux slice ressemblent agrave des liteacuteraux tableau sans la taille
var slice = []int12345Ce qui se passe crsquoest la creacuteation drsquoun tableau de longueur 5 suivie de la creacuteation drsquoune slice qui y fait reacutefeacuterence
Nous pouvons eacutegalement allouer une slice (et le tableau sous-jacent) avec la fonction native make
var s100 = make([]int 100) slice 100 ints
Pourquoi make et pas new Parce nous avons besoin de fabriquer une slice et pas seulement drsquoallouer de la meacutemoire Notez que make([]int 10) retourne []int tandis que new([]int) retourne []int
Utilisez make pour creacuteer des slices des maps et des channels (plus tard dans le cours)
La capaciteacute drsquoune sliceUne slice fait reacutefeacuterence agrave un tableau sous-jacent ainsi il peut y avoir des eacuteleacutements agrave lrsquoexpreacutemiteacute de la slice qui sont preacutesents dans le tableau
La fonction native cap (capacity) indique jusqursquoagrave quelle taille la slicepourrait encore grossir srsquoil le fallait
Apregravesvar ar = [10]int0123456789var a = ar[57] reacutefeacuterence vers le sous-tableau56
len(a) est 2 et cap(a) est 5 On peut reslicera = a[04] reacutefeacuterence vers le sous-tableau 5678
len(a) est deacutesormais 4 mais cap(a) est toujours 5
Retailler une sliceLes slices peuvent ecirctre utiliseacutees pour faire grossir un tableau
var sl = make([]int 0 100) len 0 cap 100
func appendToSlice(i int sl []int) []int if len(sl) == cap(sl) error() n = len(sl)sl = sl[0n+1] eacutetend drsquoune longueur de 1sl[n] = ireturn sl
Ainsi la longueur de sl est toujours le nombre drsquoeacuteleacutements mais il grossit avec le besoin Ce style est leacuteger et propre agrave Go
Les slices sont leacutegegraveresSentez vous libres drsquoallouer et de retailler des slices comme vous lrsquoentendez Elles sont leacutegegraveres pas de besoin drsquoallocation Souvenez-vous que ce sont des reacutefeacuterences ainsi le stockage sous-jacent peut ecirctre modifieacute
Par exemple les IO utilisent des slices pas des compteursfunc Read(fd int b []byte) intvar buffer [100]bytefor i = 0 i lt 100 i++
remplit le buffer un octet agrave la foisRead(fd buffer[ii+1]) pas drsquoallocation ici
Scinder un buffer
header data = buf[n] buf[n]
Les chaicircnes de caractegraveres peuvent ecirctre sliceacutees eacutegalement avec la mecircme efficaciteacute
Les dictionnaires (maps)
Les dictionnaires (Map)Les dictionnaires sont un autre type de reacutefeacuterence Ils sont deacuteclareacutes
de la faccedilon suivante var m map[string]float64
Ceci deacuteclare un dictionnaire indexeacute avec une clef de type string et une valeur de type float64
Crsquoest analogue agrave ce que lrsquoon trouve en C++type mapltstringfloat64gt (note the )
Etant donneacute un dictionnaire m len(m) retourne le nombre de clefs
Creacuteation drsquoun dictionnaireComme avec une slice une variable dictionnaire ne se reacutefegravere agrave rien vous devez mettre quelque chose dedans avant de lrsquoutiliser
Trois faccedilons de le faire 1) Liteacuteral liste de clefvaleur
m = map[string]float6411 pi31415
2) Creacuteationm = make(map[string]float64) make pas new
3) Affectationvar m1 map[string]float64m1 = m m1 and m now refer to same map
Indexation drsquoun dictionnaire(Les prochains exemples utilisent tous
m = map[string]float6411 pi31415)
Accegravede agrave un eacuteleacutement comme agrave une valeur si pas preacutesente renvoie une valeur zeacutero
one = m[1]zero = m[pas preacutesent] mets zero agrave 00
Stocke un eacuteleacutement
m[2] = 2m[2] = 3
Test de lrsquoexistencePour tester si une clef est peacutesente dans un dictionnaire nous pouvons utiliser une affectation multiple la forme ldquovirgule ok(comma ok)rdquo
m = map[string]float6411 pi31415var value float64var present boolvalue present = m[x]
or idiomatiquement
value ok = m[x] la forme comma ok
Si x est preacutesent dans le dictionnaire positionne le booleacuteen agrave true et la valeur et reacutecupegravere la valeur associeacute agrave la clef donneacutee Si non positionne le booleacuteen agrave false et renvoie la valeur zero pour le type consideacutereacute
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
Les liteacuteraux tableauTous les types composite ont une syntaxe similaire pour la creacuteation des valeurs Pour les tableaux cela ressemble agrave
Tableau de 3 entiers[3]int1 2 3
Tableau de 10 entiers les trois premiers nrsquoeacutetant pas agrave zeacutero[10]int 1 2 3
Vous ne voulez pas compter Utilisez pour la initialiser la longueur[]int1 2 3
Vous ne voulez pas tous les initialiser Utilisez les paires keyvalue [10]int21 31 51 71
Pointeurs sur des liteacuteraux tableauVous pouvez reacutecupeacuterer lrsquoadresse drsquoun liteacuteral tableau afin drsquoavoir un pointeur sur une instance nouvellement creacuteeacutee
func fp(a [3]int) fmtPrintln(a) func main()
for i = 0 i lt 3 i++ fp(amp[3]inti ii iii)
Output
amp[0 0 0]amp[1 1 1]amp[2 4 8]
Les slices
Les slicesUne tranche (slice) est une reacutefeacuterence vers une section drsquoune tableau Les slices sont habituellement plus utiliseacutees que des tableaux pleins Une slice ne coute pas grand chose en place et performance (plus agrave venir)
Un type slice ressemble agrave un type tableau sans la taille var a []int
La fonction native len(a) retourne le nombre drsquoeacuteleacutements de la tranche
On creacutee une slice en tranchant un tableau ou une autre slice a = ar[79]
Les index valides de a seront alors 0 et 1 len(a)==2
Raccourcis pour les slices
Quand on creacutee une slice le premier index est par deacutefaut agrave 0 ar[n] signifie ar[0n]
Le second index est par deacutefaut len(arrayslice)ar[n] signifie ar[nlen(ar)]
Enfin pour creacuteer une slice drsquoun tableau ar[] signifie ar[0len(ar)]
Un slice reacutefeacuterence un tableau Conceptually
type Slice struct base elemType pointeur sur le 0egraveme eacuteleacutementlen int nb drsquoeacuteleacutements dans la slicecap int num drsquoeacuteleacutements disponibles
Arrayar
Slicea=ar[79]
7 1 5 4 3 8 7 2 11 5 3
base=ampar[7] len=2 cap=4
Construire une sliceLes liteacuteraux slice ressemblent agrave des liteacuteraux tableau sans la taille
var slice = []int12345Ce qui se passe crsquoest la creacuteation drsquoun tableau de longueur 5 suivie de la creacuteation drsquoune slice qui y fait reacutefeacuterence
Nous pouvons eacutegalement allouer une slice (et le tableau sous-jacent) avec la fonction native make
var s100 = make([]int 100) slice 100 ints
Pourquoi make et pas new Parce nous avons besoin de fabriquer une slice et pas seulement drsquoallouer de la meacutemoire Notez que make([]int 10) retourne []int tandis que new([]int) retourne []int
Utilisez make pour creacuteer des slices des maps et des channels (plus tard dans le cours)
La capaciteacute drsquoune sliceUne slice fait reacutefeacuterence agrave un tableau sous-jacent ainsi il peut y avoir des eacuteleacutements agrave lrsquoexpreacutemiteacute de la slice qui sont preacutesents dans le tableau
La fonction native cap (capacity) indique jusqursquoagrave quelle taille la slicepourrait encore grossir srsquoil le fallait
Apregravesvar ar = [10]int0123456789var a = ar[57] reacutefeacuterence vers le sous-tableau56
len(a) est 2 et cap(a) est 5 On peut reslicera = a[04] reacutefeacuterence vers le sous-tableau 5678
len(a) est deacutesormais 4 mais cap(a) est toujours 5
Retailler une sliceLes slices peuvent ecirctre utiliseacutees pour faire grossir un tableau
var sl = make([]int 0 100) len 0 cap 100
func appendToSlice(i int sl []int) []int if len(sl) == cap(sl) error() n = len(sl)sl = sl[0n+1] eacutetend drsquoune longueur de 1sl[n] = ireturn sl
Ainsi la longueur de sl est toujours le nombre drsquoeacuteleacutements mais il grossit avec le besoin Ce style est leacuteger et propre agrave Go
Les slices sont leacutegegraveresSentez vous libres drsquoallouer et de retailler des slices comme vous lrsquoentendez Elles sont leacutegegraveres pas de besoin drsquoallocation Souvenez-vous que ce sont des reacutefeacuterences ainsi le stockage sous-jacent peut ecirctre modifieacute
Par exemple les IO utilisent des slices pas des compteursfunc Read(fd int b []byte) intvar buffer [100]bytefor i = 0 i lt 100 i++
remplit le buffer un octet agrave la foisRead(fd buffer[ii+1]) pas drsquoallocation ici
Scinder un buffer
header data = buf[n] buf[n]
Les chaicircnes de caractegraveres peuvent ecirctre sliceacutees eacutegalement avec la mecircme efficaciteacute
Les dictionnaires (maps)
Les dictionnaires (Map)Les dictionnaires sont un autre type de reacutefeacuterence Ils sont deacuteclareacutes
de la faccedilon suivante var m map[string]float64
Ceci deacuteclare un dictionnaire indexeacute avec une clef de type string et une valeur de type float64
Crsquoest analogue agrave ce que lrsquoon trouve en C++type mapltstringfloat64gt (note the )
Etant donneacute un dictionnaire m len(m) retourne le nombre de clefs
Creacuteation drsquoun dictionnaireComme avec une slice une variable dictionnaire ne se reacutefegravere agrave rien vous devez mettre quelque chose dedans avant de lrsquoutiliser
Trois faccedilons de le faire 1) Liteacuteral liste de clefvaleur
m = map[string]float6411 pi31415
2) Creacuteationm = make(map[string]float64) make pas new
3) Affectationvar m1 map[string]float64m1 = m m1 and m now refer to same map
Indexation drsquoun dictionnaire(Les prochains exemples utilisent tous
m = map[string]float6411 pi31415)
Accegravede agrave un eacuteleacutement comme agrave une valeur si pas preacutesente renvoie une valeur zeacutero
one = m[1]zero = m[pas preacutesent] mets zero agrave 00
Stocke un eacuteleacutement
m[2] = 2m[2] = 3
Test de lrsquoexistencePour tester si une clef est peacutesente dans un dictionnaire nous pouvons utiliser une affectation multiple la forme ldquovirgule ok(comma ok)rdquo
m = map[string]float6411 pi31415var value float64var present boolvalue present = m[x]
or idiomatiquement
value ok = m[x] la forme comma ok
Si x est preacutesent dans le dictionnaire positionne le booleacuteen agrave true et la valeur et reacutecupegravere la valeur associeacute agrave la clef donneacutee Si non positionne le booleacuteen agrave false et renvoie la valeur zero pour le type consideacutereacute
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
Pointeurs sur des liteacuteraux tableauVous pouvez reacutecupeacuterer lrsquoadresse drsquoun liteacuteral tableau afin drsquoavoir un pointeur sur une instance nouvellement creacuteeacutee
func fp(a [3]int) fmtPrintln(a) func main()
for i = 0 i lt 3 i++ fp(amp[3]inti ii iii)
Output
amp[0 0 0]amp[1 1 1]amp[2 4 8]
Les slices
Les slicesUne tranche (slice) est une reacutefeacuterence vers une section drsquoune tableau Les slices sont habituellement plus utiliseacutees que des tableaux pleins Une slice ne coute pas grand chose en place et performance (plus agrave venir)
Un type slice ressemble agrave un type tableau sans la taille var a []int
La fonction native len(a) retourne le nombre drsquoeacuteleacutements de la tranche
On creacutee une slice en tranchant un tableau ou une autre slice a = ar[79]
Les index valides de a seront alors 0 et 1 len(a)==2
Raccourcis pour les slices
Quand on creacutee une slice le premier index est par deacutefaut agrave 0 ar[n] signifie ar[0n]
Le second index est par deacutefaut len(arrayslice)ar[n] signifie ar[nlen(ar)]
Enfin pour creacuteer une slice drsquoun tableau ar[] signifie ar[0len(ar)]
Un slice reacutefeacuterence un tableau Conceptually
type Slice struct base elemType pointeur sur le 0egraveme eacuteleacutementlen int nb drsquoeacuteleacutements dans la slicecap int num drsquoeacuteleacutements disponibles
Arrayar
Slicea=ar[79]
7 1 5 4 3 8 7 2 11 5 3
base=ampar[7] len=2 cap=4
Construire une sliceLes liteacuteraux slice ressemblent agrave des liteacuteraux tableau sans la taille
var slice = []int12345Ce qui se passe crsquoest la creacuteation drsquoun tableau de longueur 5 suivie de la creacuteation drsquoune slice qui y fait reacutefeacuterence
Nous pouvons eacutegalement allouer une slice (et le tableau sous-jacent) avec la fonction native make
var s100 = make([]int 100) slice 100 ints
Pourquoi make et pas new Parce nous avons besoin de fabriquer une slice et pas seulement drsquoallouer de la meacutemoire Notez que make([]int 10) retourne []int tandis que new([]int) retourne []int
Utilisez make pour creacuteer des slices des maps et des channels (plus tard dans le cours)
La capaciteacute drsquoune sliceUne slice fait reacutefeacuterence agrave un tableau sous-jacent ainsi il peut y avoir des eacuteleacutements agrave lrsquoexpreacutemiteacute de la slice qui sont preacutesents dans le tableau
La fonction native cap (capacity) indique jusqursquoagrave quelle taille la slicepourrait encore grossir srsquoil le fallait
Apregravesvar ar = [10]int0123456789var a = ar[57] reacutefeacuterence vers le sous-tableau56
len(a) est 2 et cap(a) est 5 On peut reslicera = a[04] reacutefeacuterence vers le sous-tableau 5678
len(a) est deacutesormais 4 mais cap(a) est toujours 5
Retailler une sliceLes slices peuvent ecirctre utiliseacutees pour faire grossir un tableau
var sl = make([]int 0 100) len 0 cap 100
func appendToSlice(i int sl []int) []int if len(sl) == cap(sl) error() n = len(sl)sl = sl[0n+1] eacutetend drsquoune longueur de 1sl[n] = ireturn sl
Ainsi la longueur de sl est toujours le nombre drsquoeacuteleacutements mais il grossit avec le besoin Ce style est leacuteger et propre agrave Go
Les slices sont leacutegegraveresSentez vous libres drsquoallouer et de retailler des slices comme vous lrsquoentendez Elles sont leacutegegraveres pas de besoin drsquoallocation Souvenez-vous que ce sont des reacutefeacuterences ainsi le stockage sous-jacent peut ecirctre modifieacute
Par exemple les IO utilisent des slices pas des compteursfunc Read(fd int b []byte) intvar buffer [100]bytefor i = 0 i lt 100 i++
remplit le buffer un octet agrave la foisRead(fd buffer[ii+1]) pas drsquoallocation ici
Scinder un buffer
header data = buf[n] buf[n]
Les chaicircnes de caractegraveres peuvent ecirctre sliceacutees eacutegalement avec la mecircme efficaciteacute
Les dictionnaires (maps)
Les dictionnaires (Map)Les dictionnaires sont un autre type de reacutefeacuterence Ils sont deacuteclareacutes
de la faccedilon suivante var m map[string]float64
Ceci deacuteclare un dictionnaire indexeacute avec une clef de type string et une valeur de type float64
Crsquoest analogue agrave ce que lrsquoon trouve en C++type mapltstringfloat64gt (note the )
Etant donneacute un dictionnaire m len(m) retourne le nombre de clefs
Creacuteation drsquoun dictionnaireComme avec une slice une variable dictionnaire ne se reacutefegravere agrave rien vous devez mettre quelque chose dedans avant de lrsquoutiliser
Trois faccedilons de le faire 1) Liteacuteral liste de clefvaleur
m = map[string]float6411 pi31415
2) Creacuteationm = make(map[string]float64) make pas new
3) Affectationvar m1 map[string]float64m1 = m m1 and m now refer to same map
Indexation drsquoun dictionnaire(Les prochains exemples utilisent tous
m = map[string]float6411 pi31415)
Accegravede agrave un eacuteleacutement comme agrave une valeur si pas preacutesente renvoie une valeur zeacutero
one = m[1]zero = m[pas preacutesent] mets zero agrave 00
Stocke un eacuteleacutement
m[2] = 2m[2] = 3
Test de lrsquoexistencePour tester si une clef est peacutesente dans un dictionnaire nous pouvons utiliser une affectation multiple la forme ldquovirgule ok(comma ok)rdquo
m = map[string]float6411 pi31415var value float64var present boolvalue present = m[x]
or idiomatiquement
value ok = m[x] la forme comma ok
Si x est preacutesent dans le dictionnaire positionne le booleacuteen agrave true et la valeur et reacutecupegravere la valeur associeacute agrave la clef donneacutee Si non positionne le booleacuteen agrave false et renvoie la valeur zero pour le type consideacutereacute
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
Les slices
Les slicesUne tranche (slice) est une reacutefeacuterence vers une section drsquoune tableau Les slices sont habituellement plus utiliseacutees que des tableaux pleins Une slice ne coute pas grand chose en place et performance (plus agrave venir)
Un type slice ressemble agrave un type tableau sans la taille var a []int
La fonction native len(a) retourne le nombre drsquoeacuteleacutements de la tranche
On creacutee une slice en tranchant un tableau ou une autre slice a = ar[79]
Les index valides de a seront alors 0 et 1 len(a)==2
Raccourcis pour les slices
Quand on creacutee une slice le premier index est par deacutefaut agrave 0 ar[n] signifie ar[0n]
Le second index est par deacutefaut len(arrayslice)ar[n] signifie ar[nlen(ar)]
Enfin pour creacuteer une slice drsquoun tableau ar[] signifie ar[0len(ar)]
Un slice reacutefeacuterence un tableau Conceptually
type Slice struct base elemType pointeur sur le 0egraveme eacuteleacutementlen int nb drsquoeacuteleacutements dans la slicecap int num drsquoeacuteleacutements disponibles
Arrayar
Slicea=ar[79]
7 1 5 4 3 8 7 2 11 5 3
base=ampar[7] len=2 cap=4
Construire une sliceLes liteacuteraux slice ressemblent agrave des liteacuteraux tableau sans la taille
var slice = []int12345Ce qui se passe crsquoest la creacuteation drsquoun tableau de longueur 5 suivie de la creacuteation drsquoune slice qui y fait reacutefeacuterence
Nous pouvons eacutegalement allouer une slice (et le tableau sous-jacent) avec la fonction native make
var s100 = make([]int 100) slice 100 ints
Pourquoi make et pas new Parce nous avons besoin de fabriquer une slice et pas seulement drsquoallouer de la meacutemoire Notez que make([]int 10) retourne []int tandis que new([]int) retourne []int
Utilisez make pour creacuteer des slices des maps et des channels (plus tard dans le cours)
La capaciteacute drsquoune sliceUne slice fait reacutefeacuterence agrave un tableau sous-jacent ainsi il peut y avoir des eacuteleacutements agrave lrsquoexpreacutemiteacute de la slice qui sont preacutesents dans le tableau
La fonction native cap (capacity) indique jusqursquoagrave quelle taille la slicepourrait encore grossir srsquoil le fallait
Apregravesvar ar = [10]int0123456789var a = ar[57] reacutefeacuterence vers le sous-tableau56
len(a) est 2 et cap(a) est 5 On peut reslicera = a[04] reacutefeacuterence vers le sous-tableau 5678
len(a) est deacutesormais 4 mais cap(a) est toujours 5
Retailler une sliceLes slices peuvent ecirctre utiliseacutees pour faire grossir un tableau
var sl = make([]int 0 100) len 0 cap 100
func appendToSlice(i int sl []int) []int if len(sl) == cap(sl) error() n = len(sl)sl = sl[0n+1] eacutetend drsquoune longueur de 1sl[n] = ireturn sl
Ainsi la longueur de sl est toujours le nombre drsquoeacuteleacutements mais il grossit avec le besoin Ce style est leacuteger et propre agrave Go
Les slices sont leacutegegraveresSentez vous libres drsquoallouer et de retailler des slices comme vous lrsquoentendez Elles sont leacutegegraveres pas de besoin drsquoallocation Souvenez-vous que ce sont des reacutefeacuterences ainsi le stockage sous-jacent peut ecirctre modifieacute
Par exemple les IO utilisent des slices pas des compteursfunc Read(fd int b []byte) intvar buffer [100]bytefor i = 0 i lt 100 i++
remplit le buffer un octet agrave la foisRead(fd buffer[ii+1]) pas drsquoallocation ici
Scinder un buffer
header data = buf[n] buf[n]
Les chaicircnes de caractegraveres peuvent ecirctre sliceacutees eacutegalement avec la mecircme efficaciteacute
Les dictionnaires (maps)
Les dictionnaires (Map)Les dictionnaires sont un autre type de reacutefeacuterence Ils sont deacuteclareacutes
de la faccedilon suivante var m map[string]float64
Ceci deacuteclare un dictionnaire indexeacute avec une clef de type string et une valeur de type float64
Crsquoest analogue agrave ce que lrsquoon trouve en C++type mapltstringfloat64gt (note the )
Etant donneacute un dictionnaire m len(m) retourne le nombre de clefs
Creacuteation drsquoun dictionnaireComme avec une slice une variable dictionnaire ne se reacutefegravere agrave rien vous devez mettre quelque chose dedans avant de lrsquoutiliser
Trois faccedilons de le faire 1) Liteacuteral liste de clefvaleur
m = map[string]float6411 pi31415
2) Creacuteationm = make(map[string]float64) make pas new
3) Affectationvar m1 map[string]float64m1 = m m1 and m now refer to same map
Indexation drsquoun dictionnaire(Les prochains exemples utilisent tous
m = map[string]float6411 pi31415)
Accegravede agrave un eacuteleacutement comme agrave une valeur si pas preacutesente renvoie une valeur zeacutero
one = m[1]zero = m[pas preacutesent] mets zero agrave 00
Stocke un eacuteleacutement
m[2] = 2m[2] = 3
Test de lrsquoexistencePour tester si une clef est peacutesente dans un dictionnaire nous pouvons utiliser une affectation multiple la forme ldquovirgule ok(comma ok)rdquo
m = map[string]float6411 pi31415var value float64var present boolvalue present = m[x]
or idiomatiquement
value ok = m[x] la forme comma ok
Si x est preacutesent dans le dictionnaire positionne le booleacuteen agrave true et la valeur et reacutecupegravere la valeur associeacute agrave la clef donneacutee Si non positionne le booleacuteen agrave false et renvoie la valeur zero pour le type consideacutereacute
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
Les slicesUne tranche (slice) est une reacutefeacuterence vers une section drsquoune tableau Les slices sont habituellement plus utiliseacutees que des tableaux pleins Une slice ne coute pas grand chose en place et performance (plus agrave venir)
Un type slice ressemble agrave un type tableau sans la taille var a []int
La fonction native len(a) retourne le nombre drsquoeacuteleacutements de la tranche
On creacutee une slice en tranchant un tableau ou une autre slice a = ar[79]
Les index valides de a seront alors 0 et 1 len(a)==2
Raccourcis pour les slices
Quand on creacutee une slice le premier index est par deacutefaut agrave 0 ar[n] signifie ar[0n]
Le second index est par deacutefaut len(arrayslice)ar[n] signifie ar[nlen(ar)]
Enfin pour creacuteer une slice drsquoun tableau ar[] signifie ar[0len(ar)]
Un slice reacutefeacuterence un tableau Conceptually
type Slice struct base elemType pointeur sur le 0egraveme eacuteleacutementlen int nb drsquoeacuteleacutements dans la slicecap int num drsquoeacuteleacutements disponibles
Arrayar
Slicea=ar[79]
7 1 5 4 3 8 7 2 11 5 3
base=ampar[7] len=2 cap=4
Construire une sliceLes liteacuteraux slice ressemblent agrave des liteacuteraux tableau sans la taille
var slice = []int12345Ce qui se passe crsquoest la creacuteation drsquoun tableau de longueur 5 suivie de la creacuteation drsquoune slice qui y fait reacutefeacuterence
Nous pouvons eacutegalement allouer une slice (et le tableau sous-jacent) avec la fonction native make
var s100 = make([]int 100) slice 100 ints
Pourquoi make et pas new Parce nous avons besoin de fabriquer une slice et pas seulement drsquoallouer de la meacutemoire Notez que make([]int 10) retourne []int tandis que new([]int) retourne []int
Utilisez make pour creacuteer des slices des maps et des channels (plus tard dans le cours)
La capaciteacute drsquoune sliceUne slice fait reacutefeacuterence agrave un tableau sous-jacent ainsi il peut y avoir des eacuteleacutements agrave lrsquoexpreacutemiteacute de la slice qui sont preacutesents dans le tableau
La fonction native cap (capacity) indique jusqursquoagrave quelle taille la slicepourrait encore grossir srsquoil le fallait
Apregravesvar ar = [10]int0123456789var a = ar[57] reacutefeacuterence vers le sous-tableau56
len(a) est 2 et cap(a) est 5 On peut reslicera = a[04] reacutefeacuterence vers le sous-tableau 5678
len(a) est deacutesormais 4 mais cap(a) est toujours 5
Retailler une sliceLes slices peuvent ecirctre utiliseacutees pour faire grossir un tableau
var sl = make([]int 0 100) len 0 cap 100
func appendToSlice(i int sl []int) []int if len(sl) == cap(sl) error() n = len(sl)sl = sl[0n+1] eacutetend drsquoune longueur de 1sl[n] = ireturn sl
Ainsi la longueur de sl est toujours le nombre drsquoeacuteleacutements mais il grossit avec le besoin Ce style est leacuteger et propre agrave Go
Les slices sont leacutegegraveresSentez vous libres drsquoallouer et de retailler des slices comme vous lrsquoentendez Elles sont leacutegegraveres pas de besoin drsquoallocation Souvenez-vous que ce sont des reacutefeacuterences ainsi le stockage sous-jacent peut ecirctre modifieacute
Par exemple les IO utilisent des slices pas des compteursfunc Read(fd int b []byte) intvar buffer [100]bytefor i = 0 i lt 100 i++
remplit le buffer un octet agrave la foisRead(fd buffer[ii+1]) pas drsquoallocation ici
Scinder un buffer
header data = buf[n] buf[n]
Les chaicircnes de caractegraveres peuvent ecirctre sliceacutees eacutegalement avec la mecircme efficaciteacute
Les dictionnaires (maps)
Les dictionnaires (Map)Les dictionnaires sont un autre type de reacutefeacuterence Ils sont deacuteclareacutes
de la faccedilon suivante var m map[string]float64
Ceci deacuteclare un dictionnaire indexeacute avec une clef de type string et une valeur de type float64
Crsquoest analogue agrave ce que lrsquoon trouve en C++type mapltstringfloat64gt (note the )
Etant donneacute un dictionnaire m len(m) retourne le nombre de clefs
Creacuteation drsquoun dictionnaireComme avec une slice une variable dictionnaire ne se reacutefegravere agrave rien vous devez mettre quelque chose dedans avant de lrsquoutiliser
Trois faccedilons de le faire 1) Liteacuteral liste de clefvaleur
m = map[string]float6411 pi31415
2) Creacuteationm = make(map[string]float64) make pas new
3) Affectationvar m1 map[string]float64m1 = m m1 and m now refer to same map
Indexation drsquoun dictionnaire(Les prochains exemples utilisent tous
m = map[string]float6411 pi31415)
Accegravede agrave un eacuteleacutement comme agrave une valeur si pas preacutesente renvoie une valeur zeacutero
one = m[1]zero = m[pas preacutesent] mets zero agrave 00
Stocke un eacuteleacutement
m[2] = 2m[2] = 3
Test de lrsquoexistencePour tester si une clef est peacutesente dans un dictionnaire nous pouvons utiliser une affectation multiple la forme ldquovirgule ok(comma ok)rdquo
m = map[string]float6411 pi31415var value float64var present boolvalue present = m[x]
or idiomatiquement
value ok = m[x] la forme comma ok
Si x est preacutesent dans le dictionnaire positionne le booleacuteen agrave true et la valeur et reacutecupegravere la valeur associeacute agrave la clef donneacutee Si non positionne le booleacuteen agrave false et renvoie la valeur zero pour le type consideacutereacute
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
Raccourcis pour les slices
Quand on creacutee une slice le premier index est par deacutefaut agrave 0 ar[n] signifie ar[0n]
Le second index est par deacutefaut len(arrayslice)ar[n] signifie ar[nlen(ar)]
Enfin pour creacuteer une slice drsquoun tableau ar[] signifie ar[0len(ar)]
Un slice reacutefeacuterence un tableau Conceptually
type Slice struct base elemType pointeur sur le 0egraveme eacuteleacutementlen int nb drsquoeacuteleacutements dans la slicecap int num drsquoeacuteleacutements disponibles
Arrayar
Slicea=ar[79]
7 1 5 4 3 8 7 2 11 5 3
base=ampar[7] len=2 cap=4
Construire une sliceLes liteacuteraux slice ressemblent agrave des liteacuteraux tableau sans la taille
var slice = []int12345Ce qui se passe crsquoest la creacuteation drsquoun tableau de longueur 5 suivie de la creacuteation drsquoune slice qui y fait reacutefeacuterence
Nous pouvons eacutegalement allouer une slice (et le tableau sous-jacent) avec la fonction native make
var s100 = make([]int 100) slice 100 ints
Pourquoi make et pas new Parce nous avons besoin de fabriquer une slice et pas seulement drsquoallouer de la meacutemoire Notez que make([]int 10) retourne []int tandis que new([]int) retourne []int
Utilisez make pour creacuteer des slices des maps et des channels (plus tard dans le cours)
La capaciteacute drsquoune sliceUne slice fait reacutefeacuterence agrave un tableau sous-jacent ainsi il peut y avoir des eacuteleacutements agrave lrsquoexpreacutemiteacute de la slice qui sont preacutesents dans le tableau
La fonction native cap (capacity) indique jusqursquoagrave quelle taille la slicepourrait encore grossir srsquoil le fallait
Apregravesvar ar = [10]int0123456789var a = ar[57] reacutefeacuterence vers le sous-tableau56
len(a) est 2 et cap(a) est 5 On peut reslicera = a[04] reacutefeacuterence vers le sous-tableau 5678
len(a) est deacutesormais 4 mais cap(a) est toujours 5
Retailler une sliceLes slices peuvent ecirctre utiliseacutees pour faire grossir un tableau
var sl = make([]int 0 100) len 0 cap 100
func appendToSlice(i int sl []int) []int if len(sl) == cap(sl) error() n = len(sl)sl = sl[0n+1] eacutetend drsquoune longueur de 1sl[n] = ireturn sl
Ainsi la longueur de sl est toujours le nombre drsquoeacuteleacutements mais il grossit avec le besoin Ce style est leacuteger et propre agrave Go
Les slices sont leacutegegraveresSentez vous libres drsquoallouer et de retailler des slices comme vous lrsquoentendez Elles sont leacutegegraveres pas de besoin drsquoallocation Souvenez-vous que ce sont des reacutefeacuterences ainsi le stockage sous-jacent peut ecirctre modifieacute
Par exemple les IO utilisent des slices pas des compteursfunc Read(fd int b []byte) intvar buffer [100]bytefor i = 0 i lt 100 i++
remplit le buffer un octet agrave la foisRead(fd buffer[ii+1]) pas drsquoallocation ici
Scinder un buffer
header data = buf[n] buf[n]
Les chaicircnes de caractegraveres peuvent ecirctre sliceacutees eacutegalement avec la mecircme efficaciteacute
Les dictionnaires (maps)
Les dictionnaires (Map)Les dictionnaires sont un autre type de reacutefeacuterence Ils sont deacuteclareacutes
de la faccedilon suivante var m map[string]float64
Ceci deacuteclare un dictionnaire indexeacute avec une clef de type string et une valeur de type float64
Crsquoest analogue agrave ce que lrsquoon trouve en C++type mapltstringfloat64gt (note the )
Etant donneacute un dictionnaire m len(m) retourne le nombre de clefs
Creacuteation drsquoun dictionnaireComme avec une slice une variable dictionnaire ne se reacutefegravere agrave rien vous devez mettre quelque chose dedans avant de lrsquoutiliser
Trois faccedilons de le faire 1) Liteacuteral liste de clefvaleur
m = map[string]float6411 pi31415
2) Creacuteationm = make(map[string]float64) make pas new
3) Affectationvar m1 map[string]float64m1 = m m1 and m now refer to same map
Indexation drsquoun dictionnaire(Les prochains exemples utilisent tous
m = map[string]float6411 pi31415)
Accegravede agrave un eacuteleacutement comme agrave une valeur si pas preacutesente renvoie une valeur zeacutero
one = m[1]zero = m[pas preacutesent] mets zero agrave 00
Stocke un eacuteleacutement
m[2] = 2m[2] = 3
Test de lrsquoexistencePour tester si une clef est peacutesente dans un dictionnaire nous pouvons utiliser une affectation multiple la forme ldquovirgule ok(comma ok)rdquo
m = map[string]float6411 pi31415var value float64var present boolvalue present = m[x]
or idiomatiquement
value ok = m[x] la forme comma ok
Si x est preacutesent dans le dictionnaire positionne le booleacuteen agrave true et la valeur et reacutecupegravere la valeur associeacute agrave la clef donneacutee Si non positionne le booleacuteen agrave false et renvoie la valeur zero pour le type consideacutereacute
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
Un slice reacutefeacuterence un tableau Conceptually
type Slice struct base elemType pointeur sur le 0egraveme eacuteleacutementlen int nb drsquoeacuteleacutements dans la slicecap int num drsquoeacuteleacutements disponibles
Arrayar
Slicea=ar[79]
7 1 5 4 3 8 7 2 11 5 3
base=ampar[7] len=2 cap=4
Construire une sliceLes liteacuteraux slice ressemblent agrave des liteacuteraux tableau sans la taille
var slice = []int12345Ce qui se passe crsquoest la creacuteation drsquoun tableau de longueur 5 suivie de la creacuteation drsquoune slice qui y fait reacutefeacuterence
Nous pouvons eacutegalement allouer une slice (et le tableau sous-jacent) avec la fonction native make
var s100 = make([]int 100) slice 100 ints
Pourquoi make et pas new Parce nous avons besoin de fabriquer une slice et pas seulement drsquoallouer de la meacutemoire Notez que make([]int 10) retourne []int tandis que new([]int) retourne []int
Utilisez make pour creacuteer des slices des maps et des channels (plus tard dans le cours)
La capaciteacute drsquoune sliceUne slice fait reacutefeacuterence agrave un tableau sous-jacent ainsi il peut y avoir des eacuteleacutements agrave lrsquoexpreacutemiteacute de la slice qui sont preacutesents dans le tableau
La fonction native cap (capacity) indique jusqursquoagrave quelle taille la slicepourrait encore grossir srsquoil le fallait
Apregravesvar ar = [10]int0123456789var a = ar[57] reacutefeacuterence vers le sous-tableau56
len(a) est 2 et cap(a) est 5 On peut reslicera = a[04] reacutefeacuterence vers le sous-tableau 5678
len(a) est deacutesormais 4 mais cap(a) est toujours 5
Retailler une sliceLes slices peuvent ecirctre utiliseacutees pour faire grossir un tableau
var sl = make([]int 0 100) len 0 cap 100
func appendToSlice(i int sl []int) []int if len(sl) == cap(sl) error() n = len(sl)sl = sl[0n+1] eacutetend drsquoune longueur de 1sl[n] = ireturn sl
Ainsi la longueur de sl est toujours le nombre drsquoeacuteleacutements mais il grossit avec le besoin Ce style est leacuteger et propre agrave Go
Les slices sont leacutegegraveresSentez vous libres drsquoallouer et de retailler des slices comme vous lrsquoentendez Elles sont leacutegegraveres pas de besoin drsquoallocation Souvenez-vous que ce sont des reacutefeacuterences ainsi le stockage sous-jacent peut ecirctre modifieacute
Par exemple les IO utilisent des slices pas des compteursfunc Read(fd int b []byte) intvar buffer [100]bytefor i = 0 i lt 100 i++
remplit le buffer un octet agrave la foisRead(fd buffer[ii+1]) pas drsquoallocation ici
Scinder un buffer
header data = buf[n] buf[n]
Les chaicircnes de caractegraveres peuvent ecirctre sliceacutees eacutegalement avec la mecircme efficaciteacute
Les dictionnaires (maps)
Les dictionnaires (Map)Les dictionnaires sont un autre type de reacutefeacuterence Ils sont deacuteclareacutes
de la faccedilon suivante var m map[string]float64
Ceci deacuteclare un dictionnaire indexeacute avec une clef de type string et une valeur de type float64
Crsquoest analogue agrave ce que lrsquoon trouve en C++type mapltstringfloat64gt (note the )
Etant donneacute un dictionnaire m len(m) retourne le nombre de clefs
Creacuteation drsquoun dictionnaireComme avec une slice une variable dictionnaire ne se reacutefegravere agrave rien vous devez mettre quelque chose dedans avant de lrsquoutiliser
Trois faccedilons de le faire 1) Liteacuteral liste de clefvaleur
m = map[string]float6411 pi31415
2) Creacuteationm = make(map[string]float64) make pas new
3) Affectationvar m1 map[string]float64m1 = m m1 and m now refer to same map
Indexation drsquoun dictionnaire(Les prochains exemples utilisent tous
m = map[string]float6411 pi31415)
Accegravede agrave un eacuteleacutement comme agrave une valeur si pas preacutesente renvoie une valeur zeacutero
one = m[1]zero = m[pas preacutesent] mets zero agrave 00
Stocke un eacuteleacutement
m[2] = 2m[2] = 3
Test de lrsquoexistencePour tester si une clef est peacutesente dans un dictionnaire nous pouvons utiliser une affectation multiple la forme ldquovirgule ok(comma ok)rdquo
m = map[string]float6411 pi31415var value float64var present boolvalue present = m[x]
or idiomatiquement
value ok = m[x] la forme comma ok
Si x est preacutesent dans le dictionnaire positionne le booleacuteen agrave true et la valeur et reacutecupegravere la valeur associeacute agrave la clef donneacutee Si non positionne le booleacuteen agrave false et renvoie la valeur zero pour le type consideacutereacute
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
Construire une sliceLes liteacuteraux slice ressemblent agrave des liteacuteraux tableau sans la taille
var slice = []int12345Ce qui se passe crsquoest la creacuteation drsquoun tableau de longueur 5 suivie de la creacuteation drsquoune slice qui y fait reacutefeacuterence
Nous pouvons eacutegalement allouer une slice (et le tableau sous-jacent) avec la fonction native make
var s100 = make([]int 100) slice 100 ints
Pourquoi make et pas new Parce nous avons besoin de fabriquer une slice et pas seulement drsquoallouer de la meacutemoire Notez que make([]int 10) retourne []int tandis que new([]int) retourne []int
Utilisez make pour creacuteer des slices des maps et des channels (plus tard dans le cours)
La capaciteacute drsquoune sliceUne slice fait reacutefeacuterence agrave un tableau sous-jacent ainsi il peut y avoir des eacuteleacutements agrave lrsquoexpreacutemiteacute de la slice qui sont preacutesents dans le tableau
La fonction native cap (capacity) indique jusqursquoagrave quelle taille la slicepourrait encore grossir srsquoil le fallait
Apregravesvar ar = [10]int0123456789var a = ar[57] reacutefeacuterence vers le sous-tableau56
len(a) est 2 et cap(a) est 5 On peut reslicera = a[04] reacutefeacuterence vers le sous-tableau 5678
len(a) est deacutesormais 4 mais cap(a) est toujours 5
Retailler une sliceLes slices peuvent ecirctre utiliseacutees pour faire grossir un tableau
var sl = make([]int 0 100) len 0 cap 100
func appendToSlice(i int sl []int) []int if len(sl) == cap(sl) error() n = len(sl)sl = sl[0n+1] eacutetend drsquoune longueur de 1sl[n] = ireturn sl
Ainsi la longueur de sl est toujours le nombre drsquoeacuteleacutements mais il grossit avec le besoin Ce style est leacuteger et propre agrave Go
Les slices sont leacutegegraveresSentez vous libres drsquoallouer et de retailler des slices comme vous lrsquoentendez Elles sont leacutegegraveres pas de besoin drsquoallocation Souvenez-vous que ce sont des reacutefeacuterences ainsi le stockage sous-jacent peut ecirctre modifieacute
Par exemple les IO utilisent des slices pas des compteursfunc Read(fd int b []byte) intvar buffer [100]bytefor i = 0 i lt 100 i++
remplit le buffer un octet agrave la foisRead(fd buffer[ii+1]) pas drsquoallocation ici
Scinder un buffer
header data = buf[n] buf[n]
Les chaicircnes de caractegraveres peuvent ecirctre sliceacutees eacutegalement avec la mecircme efficaciteacute
Les dictionnaires (maps)
Les dictionnaires (Map)Les dictionnaires sont un autre type de reacutefeacuterence Ils sont deacuteclareacutes
de la faccedilon suivante var m map[string]float64
Ceci deacuteclare un dictionnaire indexeacute avec une clef de type string et une valeur de type float64
Crsquoest analogue agrave ce que lrsquoon trouve en C++type mapltstringfloat64gt (note the )
Etant donneacute un dictionnaire m len(m) retourne le nombre de clefs
Creacuteation drsquoun dictionnaireComme avec une slice une variable dictionnaire ne se reacutefegravere agrave rien vous devez mettre quelque chose dedans avant de lrsquoutiliser
Trois faccedilons de le faire 1) Liteacuteral liste de clefvaleur
m = map[string]float6411 pi31415
2) Creacuteationm = make(map[string]float64) make pas new
3) Affectationvar m1 map[string]float64m1 = m m1 and m now refer to same map
Indexation drsquoun dictionnaire(Les prochains exemples utilisent tous
m = map[string]float6411 pi31415)
Accegravede agrave un eacuteleacutement comme agrave une valeur si pas preacutesente renvoie une valeur zeacutero
one = m[1]zero = m[pas preacutesent] mets zero agrave 00
Stocke un eacuteleacutement
m[2] = 2m[2] = 3
Test de lrsquoexistencePour tester si une clef est peacutesente dans un dictionnaire nous pouvons utiliser une affectation multiple la forme ldquovirgule ok(comma ok)rdquo
m = map[string]float6411 pi31415var value float64var present boolvalue present = m[x]
or idiomatiquement
value ok = m[x] la forme comma ok
Si x est preacutesent dans le dictionnaire positionne le booleacuteen agrave true et la valeur et reacutecupegravere la valeur associeacute agrave la clef donneacutee Si non positionne le booleacuteen agrave false et renvoie la valeur zero pour le type consideacutereacute
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
La capaciteacute drsquoune sliceUne slice fait reacutefeacuterence agrave un tableau sous-jacent ainsi il peut y avoir des eacuteleacutements agrave lrsquoexpreacutemiteacute de la slice qui sont preacutesents dans le tableau
La fonction native cap (capacity) indique jusqursquoagrave quelle taille la slicepourrait encore grossir srsquoil le fallait
Apregravesvar ar = [10]int0123456789var a = ar[57] reacutefeacuterence vers le sous-tableau56
len(a) est 2 et cap(a) est 5 On peut reslicera = a[04] reacutefeacuterence vers le sous-tableau 5678
len(a) est deacutesormais 4 mais cap(a) est toujours 5
Retailler une sliceLes slices peuvent ecirctre utiliseacutees pour faire grossir un tableau
var sl = make([]int 0 100) len 0 cap 100
func appendToSlice(i int sl []int) []int if len(sl) == cap(sl) error() n = len(sl)sl = sl[0n+1] eacutetend drsquoune longueur de 1sl[n] = ireturn sl
Ainsi la longueur de sl est toujours le nombre drsquoeacuteleacutements mais il grossit avec le besoin Ce style est leacuteger et propre agrave Go
Les slices sont leacutegegraveresSentez vous libres drsquoallouer et de retailler des slices comme vous lrsquoentendez Elles sont leacutegegraveres pas de besoin drsquoallocation Souvenez-vous que ce sont des reacutefeacuterences ainsi le stockage sous-jacent peut ecirctre modifieacute
Par exemple les IO utilisent des slices pas des compteursfunc Read(fd int b []byte) intvar buffer [100]bytefor i = 0 i lt 100 i++
remplit le buffer un octet agrave la foisRead(fd buffer[ii+1]) pas drsquoallocation ici
Scinder un buffer
header data = buf[n] buf[n]
Les chaicircnes de caractegraveres peuvent ecirctre sliceacutees eacutegalement avec la mecircme efficaciteacute
Les dictionnaires (maps)
Les dictionnaires (Map)Les dictionnaires sont un autre type de reacutefeacuterence Ils sont deacuteclareacutes
de la faccedilon suivante var m map[string]float64
Ceci deacuteclare un dictionnaire indexeacute avec une clef de type string et une valeur de type float64
Crsquoest analogue agrave ce que lrsquoon trouve en C++type mapltstringfloat64gt (note the )
Etant donneacute un dictionnaire m len(m) retourne le nombre de clefs
Creacuteation drsquoun dictionnaireComme avec une slice une variable dictionnaire ne se reacutefegravere agrave rien vous devez mettre quelque chose dedans avant de lrsquoutiliser
Trois faccedilons de le faire 1) Liteacuteral liste de clefvaleur
m = map[string]float6411 pi31415
2) Creacuteationm = make(map[string]float64) make pas new
3) Affectationvar m1 map[string]float64m1 = m m1 and m now refer to same map
Indexation drsquoun dictionnaire(Les prochains exemples utilisent tous
m = map[string]float6411 pi31415)
Accegravede agrave un eacuteleacutement comme agrave une valeur si pas preacutesente renvoie une valeur zeacutero
one = m[1]zero = m[pas preacutesent] mets zero agrave 00
Stocke un eacuteleacutement
m[2] = 2m[2] = 3
Test de lrsquoexistencePour tester si une clef est peacutesente dans un dictionnaire nous pouvons utiliser une affectation multiple la forme ldquovirgule ok(comma ok)rdquo
m = map[string]float6411 pi31415var value float64var present boolvalue present = m[x]
or idiomatiquement
value ok = m[x] la forme comma ok
Si x est preacutesent dans le dictionnaire positionne le booleacuteen agrave true et la valeur et reacutecupegravere la valeur associeacute agrave la clef donneacutee Si non positionne le booleacuteen agrave false et renvoie la valeur zero pour le type consideacutereacute
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
Retailler une sliceLes slices peuvent ecirctre utiliseacutees pour faire grossir un tableau
var sl = make([]int 0 100) len 0 cap 100
func appendToSlice(i int sl []int) []int if len(sl) == cap(sl) error() n = len(sl)sl = sl[0n+1] eacutetend drsquoune longueur de 1sl[n] = ireturn sl
Ainsi la longueur de sl est toujours le nombre drsquoeacuteleacutements mais il grossit avec le besoin Ce style est leacuteger et propre agrave Go
Les slices sont leacutegegraveresSentez vous libres drsquoallouer et de retailler des slices comme vous lrsquoentendez Elles sont leacutegegraveres pas de besoin drsquoallocation Souvenez-vous que ce sont des reacutefeacuterences ainsi le stockage sous-jacent peut ecirctre modifieacute
Par exemple les IO utilisent des slices pas des compteursfunc Read(fd int b []byte) intvar buffer [100]bytefor i = 0 i lt 100 i++
remplit le buffer un octet agrave la foisRead(fd buffer[ii+1]) pas drsquoallocation ici
Scinder un buffer
header data = buf[n] buf[n]
Les chaicircnes de caractegraveres peuvent ecirctre sliceacutees eacutegalement avec la mecircme efficaciteacute
Les dictionnaires (maps)
Les dictionnaires (Map)Les dictionnaires sont un autre type de reacutefeacuterence Ils sont deacuteclareacutes
de la faccedilon suivante var m map[string]float64
Ceci deacuteclare un dictionnaire indexeacute avec une clef de type string et une valeur de type float64
Crsquoest analogue agrave ce que lrsquoon trouve en C++type mapltstringfloat64gt (note the )
Etant donneacute un dictionnaire m len(m) retourne le nombre de clefs
Creacuteation drsquoun dictionnaireComme avec une slice une variable dictionnaire ne se reacutefegravere agrave rien vous devez mettre quelque chose dedans avant de lrsquoutiliser
Trois faccedilons de le faire 1) Liteacuteral liste de clefvaleur
m = map[string]float6411 pi31415
2) Creacuteationm = make(map[string]float64) make pas new
3) Affectationvar m1 map[string]float64m1 = m m1 and m now refer to same map
Indexation drsquoun dictionnaire(Les prochains exemples utilisent tous
m = map[string]float6411 pi31415)
Accegravede agrave un eacuteleacutement comme agrave une valeur si pas preacutesente renvoie une valeur zeacutero
one = m[1]zero = m[pas preacutesent] mets zero agrave 00
Stocke un eacuteleacutement
m[2] = 2m[2] = 3
Test de lrsquoexistencePour tester si une clef est peacutesente dans un dictionnaire nous pouvons utiliser une affectation multiple la forme ldquovirgule ok(comma ok)rdquo
m = map[string]float6411 pi31415var value float64var present boolvalue present = m[x]
or idiomatiquement
value ok = m[x] la forme comma ok
Si x est preacutesent dans le dictionnaire positionne le booleacuteen agrave true et la valeur et reacutecupegravere la valeur associeacute agrave la clef donneacutee Si non positionne le booleacuteen agrave false et renvoie la valeur zero pour le type consideacutereacute
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
Les slices sont leacutegegraveresSentez vous libres drsquoallouer et de retailler des slices comme vous lrsquoentendez Elles sont leacutegegraveres pas de besoin drsquoallocation Souvenez-vous que ce sont des reacutefeacuterences ainsi le stockage sous-jacent peut ecirctre modifieacute
Par exemple les IO utilisent des slices pas des compteursfunc Read(fd int b []byte) intvar buffer [100]bytefor i = 0 i lt 100 i++
remplit le buffer un octet agrave la foisRead(fd buffer[ii+1]) pas drsquoallocation ici
Scinder un buffer
header data = buf[n] buf[n]
Les chaicircnes de caractegraveres peuvent ecirctre sliceacutees eacutegalement avec la mecircme efficaciteacute
Les dictionnaires (maps)
Les dictionnaires (Map)Les dictionnaires sont un autre type de reacutefeacuterence Ils sont deacuteclareacutes
de la faccedilon suivante var m map[string]float64
Ceci deacuteclare un dictionnaire indexeacute avec une clef de type string et une valeur de type float64
Crsquoest analogue agrave ce que lrsquoon trouve en C++type mapltstringfloat64gt (note the )
Etant donneacute un dictionnaire m len(m) retourne le nombre de clefs
Creacuteation drsquoun dictionnaireComme avec une slice une variable dictionnaire ne se reacutefegravere agrave rien vous devez mettre quelque chose dedans avant de lrsquoutiliser
Trois faccedilons de le faire 1) Liteacuteral liste de clefvaleur
m = map[string]float6411 pi31415
2) Creacuteationm = make(map[string]float64) make pas new
3) Affectationvar m1 map[string]float64m1 = m m1 and m now refer to same map
Indexation drsquoun dictionnaire(Les prochains exemples utilisent tous
m = map[string]float6411 pi31415)
Accegravede agrave un eacuteleacutement comme agrave une valeur si pas preacutesente renvoie une valeur zeacutero
one = m[1]zero = m[pas preacutesent] mets zero agrave 00
Stocke un eacuteleacutement
m[2] = 2m[2] = 3
Test de lrsquoexistencePour tester si une clef est peacutesente dans un dictionnaire nous pouvons utiliser une affectation multiple la forme ldquovirgule ok(comma ok)rdquo
m = map[string]float6411 pi31415var value float64var present boolvalue present = m[x]
or idiomatiquement
value ok = m[x] la forme comma ok
Si x est preacutesent dans le dictionnaire positionne le booleacuteen agrave true et la valeur et reacutecupegravere la valeur associeacute agrave la clef donneacutee Si non positionne le booleacuteen agrave false et renvoie la valeur zero pour le type consideacutereacute
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
Les dictionnaires (maps)
Les dictionnaires (Map)Les dictionnaires sont un autre type de reacutefeacuterence Ils sont deacuteclareacutes
de la faccedilon suivante var m map[string]float64
Ceci deacuteclare un dictionnaire indexeacute avec une clef de type string et une valeur de type float64
Crsquoest analogue agrave ce que lrsquoon trouve en C++type mapltstringfloat64gt (note the )
Etant donneacute un dictionnaire m len(m) retourne le nombre de clefs
Creacuteation drsquoun dictionnaireComme avec une slice une variable dictionnaire ne se reacutefegravere agrave rien vous devez mettre quelque chose dedans avant de lrsquoutiliser
Trois faccedilons de le faire 1) Liteacuteral liste de clefvaleur
m = map[string]float6411 pi31415
2) Creacuteationm = make(map[string]float64) make pas new
3) Affectationvar m1 map[string]float64m1 = m m1 and m now refer to same map
Indexation drsquoun dictionnaire(Les prochains exemples utilisent tous
m = map[string]float6411 pi31415)
Accegravede agrave un eacuteleacutement comme agrave une valeur si pas preacutesente renvoie une valeur zeacutero
one = m[1]zero = m[pas preacutesent] mets zero agrave 00
Stocke un eacuteleacutement
m[2] = 2m[2] = 3
Test de lrsquoexistencePour tester si une clef est peacutesente dans un dictionnaire nous pouvons utiliser une affectation multiple la forme ldquovirgule ok(comma ok)rdquo
m = map[string]float6411 pi31415var value float64var present boolvalue present = m[x]
or idiomatiquement
value ok = m[x] la forme comma ok
Si x est preacutesent dans le dictionnaire positionne le booleacuteen agrave true et la valeur et reacutecupegravere la valeur associeacute agrave la clef donneacutee Si non positionne le booleacuteen agrave false et renvoie la valeur zero pour le type consideacutereacute
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
Les dictionnaires (Map)Les dictionnaires sont un autre type de reacutefeacuterence Ils sont deacuteclareacutes
de la faccedilon suivante var m map[string]float64
Ceci deacuteclare un dictionnaire indexeacute avec une clef de type string et une valeur de type float64
Crsquoest analogue agrave ce que lrsquoon trouve en C++type mapltstringfloat64gt (note the )
Etant donneacute un dictionnaire m len(m) retourne le nombre de clefs
Creacuteation drsquoun dictionnaireComme avec une slice une variable dictionnaire ne se reacutefegravere agrave rien vous devez mettre quelque chose dedans avant de lrsquoutiliser
Trois faccedilons de le faire 1) Liteacuteral liste de clefvaleur
m = map[string]float6411 pi31415
2) Creacuteationm = make(map[string]float64) make pas new
3) Affectationvar m1 map[string]float64m1 = m m1 and m now refer to same map
Indexation drsquoun dictionnaire(Les prochains exemples utilisent tous
m = map[string]float6411 pi31415)
Accegravede agrave un eacuteleacutement comme agrave une valeur si pas preacutesente renvoie une valeur zeacutero
one = m[1]zero = m[pas preacutesent] mets zero agrave 00
Stocke un eacuteleacutement
m[2] = 2m[2] = 3
Test de lrsquoexistencePour tester si une clef est peacutesente dans un dictionnaire nous pouvons utiliser une affectation multiple la forme ldquovirgule ok(comma ok)rdquo
m = map[string]float6411 pi31415var value float64var present boolvalue present = m[x]
or idiomatiquement
value ok = m[x] la forme comma ok
Si x est preacutesent dans le dictionnaire positionne le booleacuteen agrave true et la valeur et reacutecupegravere la valeur associeacute agrave la clef donneacutee Si non positionne le booleacuteen agrave false et renvoie la valeur zero pour le type consideacutereacute
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
Creacuteation drsquoun dictionnaireComme avec une slice une variable dictionnaire ne se reacutefegravere agrave rien vous devez mettre quelque chose dedans avant de lrsquoutiliser
Trois faccedilons de le faire 1) Liteacuteral liste de clefvaleur
m = map[string]float6411 pi31415
2) Creacuteationm = make(map[string]float64) make pas new
3) Affectationvar m1 map[string]float64m1 = m m1 and m now refer to same map
Indexation drsquoun dictionnaire(Les prochains exemples utilisent tous
m = map[string]float6411 pi31415)
Accegravede agrave un eacuteleacutement comme agrave une valeur si pas preacutesente renvoie une valeur zeacutero
one = m[1]zero = m[pas preacutesent] mets zero agrave 00
Stocke un eacuteleacutement
m[2] = 2m[2] = 3
Test de lrsquoexistencePour tester si une clef est peacutesente dans un dictionnaire nous pouvons utiliser une affectation multiple la forme ldquovirgule ok(comma ok)rdquo
m = map[string]float6411 pi31415var value float64var present boolvalue present = m[x]
or idiomatiquement
value ok = m[x] la forme comma ok
Si x est preacutesent dans le dictionnaire positionne le booleacuteen agrave true et la valeur et reacutecupegravere la valeur associeacute agrave la clef donneacutee Si non positionne le booleacuteen agrave false et renvoie la valeur zero pour le type consideacutereacute
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
Indexation drsquoun dictionnaire(Les prochains exemples utilisent tous
m = map[string]float6411 pi31415)
Accegravede agrave un eacuteleacutement comme agrave une valeur si pas preacutesente renvoie une valeur zeacutero
one = m[1]zero = m[pas preacutesent] mets zero agrave 00
Stocke un eacuteleacutement
m[2] = 2m[2] = 3
Test de lrsquoexistencePour tester si une clef est peacutesente dans un dictionnaire nous pouvons utiliser une affectation multiple la forme ldquovirgule ok(comma ok)rdquo
m = map[string]float6411 pi31415var value float64var present boolvalue present = m[x]
or idiomatiquement
value ok = m[x] la forme comma ok
Si x est preacutesent dans le dictionnaire positionne le booleacuteen agrave true et la valeur et reacutecupegravere la valeur associeacute agrave la clef donneacutee Si non positionne le booleacuteen agrave false et renvoie la valeur zero pour le type consideacutereacute
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
Test de lrsquoexistencePour tester si une clef est peacutesente dans un dictionnaire nous pouvons utiliser une affectation multiple la forme ldquovirgule ok(comma ok)rdquo
m = map[string]float6411 pi31415var value float64var present boolvalue present = m[x]
or idiomatiquement
value ok = m[x] la forme comma ok
Si x est preacutesent dans le dictionnaire positionne le booleacuteen agrave true et la valeur et reacutecupegravere la valeur associeacute agrave la clef donneacutee Si non positionne le booleacuteen agrave false et renvoie la valeur zero pour le type consideacutereacute
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
SuppressionLa suppression drsquoune entreacutee se fait de la maniegravere suivante
m = map[string]float64110 pi31415var keep boolvar value float64var x string = f()m[x] = v keep
Si keep est true lrsquoaffectation de v dans le dictionnaire srsquoeffectue bien si keep est false lrsquoentreacutee du dictionnaire pour la clef x est supprimeacuteem[x] = 0 false supprime lrsquoentreacutee pour x
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
For et rangeLa boucle for possegravede une syntaxe speacuteciale dans le cas drsquoune iteacuteration sur un tableau drsquoune slice ou drsquoun dictionnaire
m = map[string]float64110 pi31415for key value = range m fmtPrintf(key s value gn key value)
Srsquoil nrsquoy a qursquoune seule variable ne reacutecupegravere que la clef for key = range m fmtPrintf(key sn key)
Les variables peuvent ecirctre affecteacutees ou deacuteclareacutees en utilisant = Pour les tableaux et les slices renvoie lrsquoindex et la valeur
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
Range sur une chaicircne de caractegraveresUn for utilisant un range sur une chaicircne boucle sur les points code Unicode non sur les octets (Utiliser []byte pour les octets ou utiliser le for standard) La chaicircne est consideacutereacutee devant contenir des caractegraveres en UTF-8
La boucles = [u00ffu754c]for i c = range s
fmtPrintf(dq i c) q for quoted
affiche 0[ 1yuml 31049988 6]lsquo
Si un UTF-8 est erroneacute le caractegravere est mis agrave U+FFFD et lrsquoindex avance drsquoun seul octet
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-
- Le langage Go 2egraveme partie
- Sommaire de la journeacutee
- Exercices
- Tableaux
- Tableaux (arrays)
- Les tableaux sont des valeurs
- Les liteacuteraux tableau
- Pointeurs sur des liteacuteraux tableau
- Les slices
- Les slices (2)
- Raccourcis pour les slices
- Un slice reacutefeacuterence un tableau
- Construire une slice
- La capaciteacute drsquoune slice
- Retailler une slice
- Les slices sont leacutegegraveres
- Les dictionnaires (maps)
- Les dictionnaires (Map)
- Creacuteation drsquoun dictionnaire
- Indexation drsquoun dictionnaire
- Test de lrsquoexistence
- Suppression
- For et range
- Range sur une chaicircne de caractegraveres
- Slide 25
-