ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 2 · 5లో పాఠం 3కోర్సులో 8/50~10 min
మాడ్యూల్ పాఠాలు (3/5)

కోసం...పరిధి

for ... range అనేది సేకరణల మీద మళ్ళించటానికి ఇడియోమాటిక్ మార్గం: ముక్కలు, శ్రేణులు, మ్యాప్‌లు, స్ట్రింగ్‌లు మరియు ఛానెల్‌లు. వాక్యనిర్మాణం కొద్దిగా మారుతుంది సేకరణపై ఆధారపడి, కానీ బేస్ నమూనా ఎల్లప్పుడూ ఒకే విధంగా ఉంటుంది: for key, value := range coll { ... }.

స్లైస్‌లు మరియు శ్రేణులపై పరిధి

సూచిక మరియు విలువ కాపీని అందిస్తుంది:

Go
nums := []int{10, 20, 30}
for i, v := range nums {
    fmt.Println(i, v)
}
// 0 10
// 1 20
// 2 30

తరచుగా రెండింటిలో ఒకటి సరిపోతుంది:

Go
// solo indice
for i := range nums { _ = i }

// solo valore (ignora indice con _)
for _, v := range nums { _ = v }

మ్యాప్‌లో పరిధి

రిటర్న్స్ కీ మరియు విలువ:

Go
prices := map[string]int{"pane": 2, "latte": 3, "vino": 8}
for k, v := range prices {
    fmt.Println(k, v)
}

స్ట్రింగ్‌పై పరిధి: రూన్‌లు, బైట్‌లు కాదు

for i, r := range s ప్రతి యూనికోడ్ కోడ్ పాయింట్‌కి (రూన్), ప్రతి కాదు బైట్. సూచిక i అనేది రూన్ ప్రారంభం యొక్క బైట్ ఆఫ్‌సెట్.

Go
for i, r := range "èé" {
    fmt.Printf("%d %c (%U)\n", i, r, r)
}
// 0 è (U+00E8)
// 2 é (U+00E9)

ప్రతి బైట్‌కి మళ్ళించడానికి క్లాసిక్ ఇండెక్సింగ్‌ని ఉపయోగించండి:

Go
s := "ciao"
for i := 0; i < len(s); i++ {
    fmt.Println(s[i])  // byte (uint8)
}

ఛానెల్‌లో పరిధి

ఛానెల్ మూసివేయబడే వరకు పునరావృతమవుతుంది:

Go
ch := make(chan int)
go func() {
    for i := 0; i < 3; i++ { ch <- i }
    close(ch)
}()
for v := range ch {
    fmt.Println(v)
}

మేము కాన్‌కరెన్సీ మాడ్యూల్‌లో లోతుగా త్రవ్విస్తాము.

దీనిని ప్రయత్నించండి

వ్యాయామం#go.m2.l3.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

పరిధి కోసం ఉపయోగించి సంఖ్యల యొక్క ప్రతి మూలకం యొక్క సూచిక మరియు విలువను ముద్రించండి.

ఎడిటర్ లోడ్ అవుతోంది…

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం#go.m2.l3.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

ఇండెక్స్‌ను విస్మరిస్తున్న సంఖ్యల యొక్క అన్ని విలువలను మొత్తంగా చేర్చండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

సూచికను విస్మరించడానికి `_` ఉపయోగించండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

Quiz#go.m2.l3.e3
సిద్ధంగా ఉంది

m మ్యాప్ అయినప్పుడు `k, v := పరిధి m`లో మొదటి వేరియబుల్ దేనిని సూచిస్తుంది?

Go
m := map[string]int{"a": 1, "b": 2}
for k, v := range m { fmt.Println(k, v) }
సమాధాన ఎంపికలు

రీక్యాప్

  • for k, v := range coll స్పష్టమైన పరిధితో: మీరు ఉపయోగించని వాటిని _తో విస్మరించండి.
  • స్లైస్/అరే: ఇండెక్స్ + విలువ యొక్క కాపీ. మార్చడానికి, సూచిక.
  • మ్యాప్: కీ + విలువ, ఆర్డర్ యాదృచ్ఛికం ప్రతి రన్‌లో.
  • స్ట్రింగ్: పరిధి ప్రతి బైట్‌కి కాకుండా రూన్కి (కోడ్ పాయింట్) పునరావృతమవుతుంది.
  • ఛానెల్: ఛానెల్ తెరిచినప్పుడు పునరావృతమవుతుంది; close()తో మూసివేయబడింది.