Maison > développement back-end > Golang > le corps du texte

Comment utiliser le mot-clé range dans le langage Go

青灯夜游
Libérer: 2023-01-18 15:16:47
original
1902 Les gens l'ont consulté

Dans le langage Go, le mot-clé range est utilisé dans une boucle for pour itérer les éléments d'un tableau, d'une tranche, d'un canal ou d'un ensemble ; la structure "for range" est similaire à l'instruction foreach dans d'autres langages, dans les tableaux et les tranches. il renvoie l'index de l'élément. La valeur correspondant à l'index renvoie la paire "clé-valeur" dans la collection ; la syntaxe est "pour clé, valeur := données de plage{//}".

Comment utiliser le mot-clé range dans le langage Go

L'environnement d'exploitation de ce tutoriel : système Windows 7, GO version 1.18, ordinateur Dell G3.

Go Language Range (Range)

Le mot-clé range dans le langage Go est utilisé pour itérer les éléments d'un tableau, d'une tranche, d'un canal ou d'une carte dans une boucle for. Dans les tableaux et les tranches, il renvoie l'index de l'élément et la valeur correspondant à l'index, et dans les collections, il renvoie une paire clé-valeur.

Pour le mappage, il renvoie la prochaine paire clé-valeur. Range renvoie une ou deux valeurs. Si une seule valeur est utilisée sur le côté gauche de l’expression Range, cette valeur est la première valeur du tableau ci-dessous.

La boucle for clé-valeur dans le langage Go utilise la forme syntaxique de for range, qui est similaire à l'instruction foreach dans d'autres langages​​

Explication détaillée de la boucle for range dans le langage Go

Grammar

for key, value := range data{
    //
}
Copier après la connexion
ParameterDescription
forfor range mot-clé utilisé dans la boucle.
keyLa clé renvoyée par la boucle for range.
value Une copie de la valeur renvoyée par la boucle for range.
rangepour le mot-clé range utilisé en boucle.
datapour les données de boucle de plage qui doivent être parcourues.

Instructions :

Si vous souhaitez uniquement lire la clé, le format est le suivant :

for key := range oldMap
Copier après la connexion

Ou ceci :

for key, _ := range oldMap
Copier après la connexion

Si vous souhaitez uniquement lire la valeur, le format est le suivant :

for _, value := range oldMap
Copier après la connexion

Go langue pour la boucle de plage Description

channel

通过 for range 遍历的返回值有一定的规律:

  • 数组、切片、字符串返回索引和值。

  • map 返回键和值。

  • 通道(channel)只返回通道内的值。

遍历数组、切片——获得索引和值

在遍历代码中,key 和 value 分别代表切片的下标及下标对应的值,下面的代码展示如何遍历切片,数组也是类似的遍历方法:

for key, value := range []int{1, 2, 3, 4} {
    fmt.Printf("key:%d  value:%d\n", key, value)
}
Copier après la connexion

代码输出如下:

key:0  value:1
key:1  value:2
key:2  value:3
key:3  value:4
Copier après la connexion

遍历字符串——获得字符

Go语言和其他语言类似,可以通过 for range 的组合,对字符串进行遍历,遍历时,key 和 value 分别代表字符串的索引和字符串中的每一个字符。

下面这段代码展示了如何遍历字符串:

var str = "hello 你好"
for key, value := range str {
    fmt.Printf("key:%d value:0x%x\n", key, value)
}
Copier après la connexion

代码输出如下:

key:0 value:0x68
key:1 value:0x65
key:2 value:0x6c
key:3 value:0x6c
key:4 value:0x6f
key:5 value:0x20
key:6 value:0x4f60
key:9 value:0x597d
Copier après la connexion

代码中的变量 value,实际类型是 rune 类型,以十六进制打印出来就是字符的编码。

遍历 map——获得 map 的键和值

对于 map 类型来说,for range 遍历时,key 和 value 分别代表 map 的索引键 key 和索引对应的值,一般被称为 map 的键值对,因为它们是一对一对出现的,下面的代码演示了如何遍历 map。

m := map[string]int{
    "hello": 100,
    "world": 200,
}
for key, value := range m {
    fmt.Println(key, value)
}
Copier après la connexion

代码输出如下:

hello 100
world 200
Copier après la connexion

注意

对 map 遍历时,遍历输出的键值是无序的,如果需要有序的键值对输出,需要对结果进行排序。

遍历通道(channel)——接收通道数据

for range 可以遍历通道(channel),但是通道在遍历时,只输出一个值,即管道内的类型对应的数据。

下面代码为我们展示了通道的遍历:

c := make(chan int)
go func() {
    c <- 1
    c <- 2
    c <- 3
    close(c)
}()
for v := range c {
    fmt.Println(v)
}
Copier après la connexion

代码说明如下:

  • 第 1 行创建了一个整型类型的通道。

  • 第 3 行启动了一个 goroutine,其逻辑的实现体现在第 5~8 行,实现功能是往通道中推送数据 1、2、3,然后结束并关闭通道。

  • 这段 goroutine 在声明结束后,在第 9 行马上被执行。

  • 从第 11 行开始,使用 for range 对通道 c 进行遍历,其实就是不断地从通道中取数据,直到通道被关闭。

在遍历中选择希望获得的变量

在使用 for range 循环遍历某个对象时,一般不会同时需要 key 或者 value,这个时候可以采用一些技巧,让代码变得更简单,下面将前面的例子修改一下,参考下面的代码示例:

m := map[string]int{
    "hello": 100,
    "world": 200,
}
for _, value := range m {
    fmt.Println(value)
}
Copier après la connexion

代码输出如下:

100
200
Copier après la connexion

在上面的例子中将 key 变成了下划线_,这里的下划线就是匿名变量。

  • 可以理解为一种占位符。

  • 匿名变量本身不会进行空间分配,也不会占用一个变量的名字。

  • 在 for range 可以对 key 使用匿名变量,也可以对 value 使用匿名变量。

再看一个匿名变量的例子:

for key, _ := range []int{1, 2, 3, 4} {
    fmt.Printf("key:%d \n", key)
}
Copier après la connexion

代码输出如下:

key:0
key:1
key:2
key:3
Copier après la connexion

在该例子中,value 被设置为匿名变量,只使用 key,而 key 本身就是切片的索引,所以例子输出索引。

我们总结一下 for 的功能:

  • Go语言的 for 包含初始化语句、条件表达式、结束语句,这 3 个部分均可缺省。

  • for range 支持对数组、切片、字符串、map、通道进行遍历操作。

  • 在需要时,可以使用匿名变量对 for range 的变量进行选取。

【相关推荐:Go视频教程编程教学

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!
Type de donnéesclévaleurDescription
Chaîne Index de chaîneCopie de la valeur du caractère de l'index correspondant à la chaîne Si Si la clé n'est pas écrite, alors l'index
arrayL'index du tableauCopie de la valeur correspondant à l'indexSi la clé est non écrit, alors l'index
slice L'index de la trancheCopie de la valeur correspondant à l'indexSi la clé n'est pas écrite, alors la clé de l'index
mapmap est renvoyée. La valeur de la carte renvoie une copie de la valeur correspondant à la cléSi Si la clé n'est pas écrite, alors la valeur de la carte est renvoyée

la valeur est la donnée acceptée par la chaîne