Comment diviser une chaîne et l’affecter à des variables dans Golang?

En Python, il est possible de diviser une chaîne et de l’affecter à des variables:

ip, port = '127.0.0.1:5432'.split(':') 

mais au Golang, cela ne semble pas fonctionner:

 ip, port := ssortingngs.Split("127.0.0.1:5432", ":") // assignment count mismatch: 2 = 1 

Question: Comment diviser une chaîne et atsortingbuer des valeurs en une seule étape?

Deux étapes, par exemple,

 package main import ( "fmt" "ssortingngs" ) func main() { s := ssortingngs.Split("127.0.0.1:5432", ":") ip, port := s[0], s[1] fmt.Println(ip, port) } 

Sortie:

 127.0.0.1 5432 

Une étape, par exemple,

 package main import ( "fmt" "net" ) func main() { host, port, err := net.SplitHostPort("127.0.0.1:5432") fmt.Println(host, port, err) } 

Sortie:

 127.0.0.1 5432  

Puisque go est flexible, vous pouvez créer votre propre split de style python

 package main import ( "fmt" "ssortingngs" "errors" ) type PySsortingng ssortingng func main() { var py PySsortingng py = "127.0.0.1:5432" ip, port , err := py.Split(":") // Python Style fmt.Println(ip, port, err) } func (py PySsortingng) Split(str ssortingng) ( ssortingng, ssortingng , error ) { s := ssortingngs.Split(ssortingng(py), str) if len(s) < 2 { return "" , "", errors.New("Minimum match not found") } return s[0] , s[1] , nil } 

Les adresses IPv6 pour les champs tels que RemoteAddr de http.Request sont au format “[:: 1]: 53343”

Donc net.SplitHostPort fonctionne très bien:

paquet principal

 import ( "fmt" "net" ) func main() { host1, port, err := net.SplitHostPort("127.0.0.1:5432") fmt.Println(host1, port, err) host2, port, err := net.SplitHostPort("[::1]:2345") fmt.Println(host2, port, err) host3, port, err := net.SplitHostPort("localhost:1234") fmt.Println(host3, port, err) } 

Le résultat est:

 127.0.0.1 5432  ::1 2345  localhost 1234