簡體   English   中英

下划線(_)在for循環Golang中的作用是什么?

[英]What does the underscore(_) do in for loop Golang?

我剛剛開始學習 Golang 語言,在 for 循環中。 我看到有時會添加下划線或不添加下划線。

無論是否添加 _,我得到的結果都是一樣的。

package main

import (
    "fmt"
)

func main() {
    doSomething()
    sum := addValues(5, 8)
    fmt.Println("The sum is", sum)

    multiSum, multiCount := addAllValues(4, 7, 9)
    fmt.Println("multisum", multiSum)
    fmt.Println("multiCount", multiCount)
}

func doSomething() {
    fmt.Println("Doing Something")
}

func addValues(value1 int, value2 int) int {
    return value1 + value2
}

func addAllValues(values ...int) (int, int) {
    total := 0
    for _, v := range values {
        total += v
    }
    return total, len(values)
}
func addAllValues(values ...int) (int, int) {
    total := 0
    for v := range values {
        total += v
    }
    return total, len(values)
}

我所知道的是我不關心索引。 這就是全部? 或者還有更多我必須知道的東西??

非常感謝您的幫助!

對於切片range

  1. for v:= range values { v是切片中元素的索引。
  2. for _, v:= range values { v是實際的元素值。
  3. for i, v:= range values { i是索引, v是元素。
  4. for i, _:= range values { i是切片中元素的索引。

您可以運行這個 playground示例來查看差異。


Range expression                          1st value          2nd value

array or slice  a  [n]E, *[n]E, or []E    index    i  int    a[i]       E
string          s  string type            index    i  int    see below  rune
map             m  map[K]V                key      k  K      m[k]       V
channel         c  chan E, <-chan E       element  e  E

有關詳細信息,請參閱規范

如果你不想使用在循環中迭代的變量,你可以使用_簡單地讓 Go 忽略它:

mySlice := [int]{1,3,4,59,5}
for _,x := range mySlice {
    fmt.Println(x)
}

通過放置下划線,您是在告訴編譯器:好的,我知道這個 function 正在返回一些東西,但我不在乎:例如:

package main

import "fmt"

func main() {
    mul1, add1 := test_function(2, 3)
    fmt.Println(mul1, add1)

    mul2, _ := test_function(4, 5)
    fmt.Println(mul2)

    _, add3 := test_function(7, 8)
    fmt.Println(add3)
}

func test_function(a int, b int) (mul int, add int) {
    return a * b, a + b
}

只是添加到上面的驚人答案:我認為主要好處之一是保持程序的可讀性:如果您用變量替換空白標識符,那么您必須使用它,否則您的程序將無法編譯。 此減少 memory 分配也忽略了返回的參數之一......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM