ОСНОВЫ ГОЛАНГА

Овладение заявлением о диапазоне силы го

Go, также известный как Golang, — это мощный и эффективный язык программирования, предлагающий широкий спектр функций и функций. Среди этих функций — универсальный оператор range, который обеспечивает элегантный и лаконичный способ перебора различных структур данных. В этом сообщении блога мы рассмотрим возможности оператора Go range и узнаем, как использовать весь его потенциал для упрощения и улучшения вашего кода.

Основы диапазона:

Оператор range в Go в основном используется для перебора структур данных, таких как массивы, срезы, карты, строки и каналы. Он возвращает одно или два значения, в зависимости от типа итерируемой структуры данных.

Итерация по массивам и срезам:

При использовании range с массивами и срезами он возвращает два значения: индекс и значение соответствующего элемента. Вот пример:

import (
 "fmt"
)

func main() {

 numbers := []int{1, 2, 3, 4, 5}
 for index, value := range numbers {
  fmt.Printf("Index: %d, Value: %d\n", index, value)
 }
}

Вывод будет:

Index: 0, Value: 1
Index: 1, Value: 2
Index: 2, Value: 3
Index: 3, Value: 4
Index: 4, Value: 5

Итерация по картам:

При переборе карты с использованием range он возвращает два значения: ключ и соответствующее значение. Вот пример:

package main

import (
 "fmt"
)

func main() {

 userInfo := map[string]string{
  "name":  "John Doe",
  "email": "[email protected]",
  "role":  "admin",
 }
 for key, value := range userInfo {
  fmt.Printf("Key: %s, Value: %s\n", key, value)
 }
}

Вывод будет:

Key: name, Value: John Doe
Key: email, Value: [email protected]
Key: role, Value: admin

Итерация по строкам:

В Go строки представляют собой последовательности символов Unicode. При переборе строки с использованием range возвращается два значения: индекс (позиция байта) и соответствующая руна Unicode. Вот пример:

package main

import (
 "fmt"
)

func main() {

 message := "Hello, 世界"
 for index, runeValue := range message {
  fmt.Printf("Index: %d, Rune: %c\n", index, runeValue)
 }
}

Вывод будет:

Index: 0, Rune: H
Index: 1, Rune: e
Index: 2, Rune: l
Index: 3, Rune: l
Index: 4, Rune: o
Index: 5, Rune: ,
Index: 6, Rune:  
Index: 7, Rune: 世
Index: 10, Rune: 界

Итерация по каналам:

При переборе канала с использованием range он получает значения, отправленные по каналу, пока канал не будет закрыт. Вот пример:

package main

import "fmt"

func main() {

 ch := make(chan int)
 go func() {
  defer close(ch)
  for i := 1; i <= 5; i++ {
   ch <- i
  }
 }()

 for value := range ch {
  fmt.Println(value)
 }
}

Вывод будет:

1
2
3
4
5

Игнорирование значений и использование подчеркивания:

В некоторых сценариях вас может интересовать только одно из значений, возвращаемых range, а другое значение не требуется. Ниже приведен пример, где мы игнорируем key, используя подчеркивание.

package main

import "fmt"

func main() {

 userInfo := map[string]string{
  "name":  "John Doe",
  "email": "[email protected]",
  "role":  "admin",
 }
 for _, value := range userInfo {
  fmt.Println(value)
 }
}

Вывод будет:

John Doe
[email protected]
admin

мы также можем игнорировать значение, просто не упоминая его в цикле for

package main

import "fmt"

func main() {

 userInfo := map[string]string{
  "name":  "John Doe",
  "email": "[email protected]",
  "role":  "admin",
 }
 for key := range userInfo {
  fmt.Println(key)
 }
}

Вывод будет:

email
role
name

Повышение уровня кодирования

Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:

  • 👏 Хлопайте за историю и подписывайтесь на автора 👉
  • 📰 Смотрите больше контента в публикации Level Up Coding
  • 💰 Бесплатный курс собеседования по программированию ⇒ Просмотреть курс
  • 🔔 Подписывайтесь на нас: Twitter | ЛинкедИн | "Новостная рассылка"

🚀👉 Присоединяйтесь к коллективу талантов Level Up и найдите прекрасную работу