2016-04-27 11 views
0

Ich werde folgendes als Befehl geben, um mein Go-Programm zu starten.Argument Verarbeitung in Golang

gehen app.go 3001-3005

Was führen dies tun soll, mein gehen Erholung api auf Server-Ports 3001 bis 3005.

Dieser Teil meiner Hauptfunktion ausführen was behandelt dieses Argument.

func main() { 
ipfile := os.Args[1:] 
s := strings.Split(ipfile, "-") 
mux := routes.New() 
mux.Put("/:key1/:value1", PutData) 
mux.Get("/profile/:key1", GetSingleData) 
mux.Get("/profile", GetData) 
http.Handle("/", mix) 

Hier werde ich eine for-Schleife ausführen und das erste Argument durch s [i] ersetzen.

http.ListenAndServe(":3000", nil) 
} 

bekomme ich folgende Ausgabe:

cannot use ipfile (type []string) as type string in argument to strings.Split 

Welche Datentyp zurückgibt os.args? Ich habe versucht, es in String zu konvertieren und dann zu teilen. Funktioniert nicht. Bitte lassen Sie mich wissen, was los ist?

+0

auch: 'http.ListenAndServe' blockiert, so dass Sie jeden Zuhörer in seinen eigenen goroutine abzufeuern (zB als Teil eines' sync.WaitGroup'), wenn Sie drei gleichzeitige Listener an verschiedenen Ports haben möchten. – elithrar

+0

Können Sie mir sagen, wie man sync.Waitgroup in diesem Zusammenhang verwendet? – RJP

Antwort

3

Wie der Fehler sagt, ist ipfile ein []string. Die [1:] Slice-Operation wird ein Slice zurückgeben, auch wenn nur 1 Element vorhanden ist.

Nach Überprüfung os.Args die genug Elemente, verwenden:

ipfile := os.Args[1] 
s := strings.Split(ipfile, "-") 
+0

Danke. Der Fehler, den ich hatte, war ein extra ':' nach dem 1 in ipfile: = os.Args [1] – RJP