L'utilizzo dell'istruzione if è qualcosa che non mi piace perché rende più difficile leggere il codice sorgente, un modo più elegante è usare switch/case. Switch/caso è in Go molto multi-funzionali, così dopo aver letto tutte le risposte a questo post, mi si avvicinò con la seguente soluzione:
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()
}
uscita:
<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>
non è esattamente lo stesso come il tuo problema, ma questo solo per darti un'idea su come aggirarlo.
perché così tanti downvoters? Non puoi più fare domande senza che qualcuno si senta infelice qui. – marcio
Non riesco a capire perché. Non è irragionevole pensare che le mappe e le sezioni funzionino allo stesso modo, proprio come std :: map e std :: vector hanno un'interfaccia simile in C++. –
I (erroneamente) ho ipotizzato che le slice di Go fossero fondamentalmente mappe con chiavi int consecutive. Un rapido sguardo sulla sintassi può farti adottare questo modello mentale, BTW. Ancora non capisco perché il desiderio di downvotare una domanda a causa di ciò, però. Mi chiedo se la comunità di Go venga invasa da studenti di CI aggressivi passivi o qualcosa del genere LOL – marcio