我剛剛開始學習 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)
}
我所知道的是我不關心索引。這就是全部?或者還有什么我必須知道的?
我真的很感謝你的幫助!
uj5u.com熱心網友回復:
對于range過切片:
- in
for v := range values {是v切片中元素的索引。 - 其中
for _, v := range values {是v實際的元素值。 - in
for i, v := range values {是i索引,而 thev是元素。 - in
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
有關更多詳細資訊,請參閱規范。
uj5u.com熱心網友回復:
通過放置下劃線,你告訴編譯器:好的,我知道這個函式正在回傳一些東西,但我不在乎!例如:
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
}
uj5u.com熱心網友回復:
如果不想使用回圈中迭代的變數,可以使用_to 簡單地讓 Go 忽略它:
mySlice := [int]{1,3,4,59,5}
for _,x := range mySlice {
fmt.Println(x)
}
uj5u.com熱心網友回復:
只是為了補充上面的驚人答案:我認為主要好處之一是保持程式的可讀性:如果用變數替換空白識別符號,那么您必須使用它,否則您的程式將無法編譯。這種減少記憶體分配也忽略了回傳的引數之一......
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/424132.html
標籤:去
