我們可以很容易地做到這一點與地圖:如何檢查切片是否在Go中有指定的索引?
item, ok := myMap["index"]
但不能與片:
item, ok := mySlice[3] // panic!
驚訝這是沒有問過。也許我在用Go切片時錯誤的心理模型?
我們可以很容易地做到這一點與地圖:如何檢查切片是否在Go中有指定的索引?
item, ok := myMap["index"]
但不能與片:
item, ok := mySlice[3] // panic!
驚訝這是沒有問過。也許我在用Go切片時錯誤的心理模型?
有在Go無疏片,所以你可以簡單地檢查長度:
if len(mySlice) > 3 {
// ...
}
如果長度大於3,你知道,該指數3和所有那些之前就已存在。
if語句的用法是我不喜歡的,因爲它讓閱讀源代碼變得更困難,更優雅的方式是使用switch/case。開關/案例是走得非常多的功能,所以閱讀所有的答案在這個崗位後,我用以下解決方案上來:
package main
import (
"fmt"
)
func checkarg(data ...string) {
for _, value := range data {
fmt.Printf("<%v> ", value)
}
fmt.Println()
switch len(data) {
case 0:
fmt.Println("No arguments at all!")
fmt.Println("Missing <IP:port>")
fallthrough
case 1:
fmt.Println("Missing <command>")
fallthrough
case 2:
fmt.Println("Missing <key>")
fallthrough
case 3:
fmt.Println("Missing <value>")
case 4:
fmt.Println("len = 4 (correct)")
default:
fmt.Println("Unknown length")
}
}
func main() {
checkarg("127.0.0.1:6379", "set", "Foo", "Bar", "test")
fmt.Println()
checkarg("127.0.0.1:6379", "set", "Foo", "Bar")
fmt.Println()
checkarg("127.0.0.1:6379", "set", "Foo")
fmt.Println()
checkarg("127.0.0.1:6379", "set")
fmt.Println()
checkarg("127.0.0.1:6379")
fmt.Println()
checkarg()
fmt.Println()
}
輸出:
<127.0.0.1:6379> <set> <Foo> <Bar> <test>
Unknown length
<127.0.0.1:6379> <set> <Foo> <Bar>
len = 4 (correct)
<127.0.0.1:6379> <set> <Foo>
Missing <value>
<127.0.0.1:6379> <set>
Missing <key>
Missing <value>
<127.0.0.1:6379>
Missing <command>
Missing <key>
Missing <value>
No arguments at all!
Missing <IP:port>
Missing <command>
Missing <key>
Missing <value>
這是不完全一樣的作爲你的問題,但這只是給你一個想法如何解決它。
對這個問題有錯誤嗎?的xD – marcio 2014-12-21 23:31:48
爲什麼這麼多downvoters?如果沒有人在這裏不開心,你不能再提出任何問題。 – marcio 2014-12-02 14:53:15
我看不出爲什麼。認爲地圖和切片的工作原理是一樣的,就像std :: map和std :: vector在C++中有類似的接口一樣,這並不是不合理的。 – 2014-12-02 15:00:10
我(錯誤地)假設Go切片基本上是連續int鍵的映射。快速瀏覽語法可以使你採用這種心理模型,BTW。 儘管如此,仍然沒有得到爲什麼渴望降低問題的原因。讓我想知道Go社區是被被動的攻擊性CI學生入侵或者其他什麼東西LOL – marcio 2014-12-02 15:06:41