[英]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
:
for v:= range values {
v
是切片中元素的索引。for _, v:= range values {
v
是實際的元素值。for i, v:= range values {
i
是索引, v
是元素。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.