Использование инструкции if - это то, что мне не нравится, потому что это делает чтение исходного кода более сложным, более элегантным способом является использование переключателя/футляра. Switch/случай в Go очень многофункциональны, так что после прочтения всех ответов на этот пост, я придумал следующее решение:
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>
Это не совсем то же самое как ваша проблема, но это просто для того, чтобы дать вам представление о том, как обойти это.
Почему так много downvoters? Вы не можете больше задавать вопрос, если кто-то не станет несчастным здесь. – marcio
Я тоже не понимаю, почему. Неразумно думать, что карты и срезы будут работать одинаково, так же как std :: map и std :: vector имеют аналогичный интерфейс на C++. –
I (ошибочно) Предположим, что ломтиками Go были в основном карты с последовательными ключами int. Быстрый взгляд на синтаксис может заставить вас принять эту ментальную модель, BTW. По-прежнему не получается, почему желание уменьшить вопрос из-за этого. Заставляет меня задаться вопросом, запутывается ли сообщество Go пассивными агрессивными студентами CI или чем-то LOL – marcio