strings how golang functions from convert string go split

how - int from string golang



¿Cómo dividir una cadena y asignarla a variables en Golang? (3)

En Python, es posible dividir una cadena y asignarla a variables:

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

pero en Golang no parece funcionar:

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

Pregunta: ¿Cómo dividir una cadena y asignar valores en un solo paso?


Como go es flexible y puedes crear tu propia división de estilo python ...

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


Dos pasos, por ejemplo,

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

Salida:

127.0.0.1 5432

Un paso, por ejemplo,

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

Salida:

127.0.0.1 5432 <nil>


Las direcciones IPv6 para campos como RemoteAddr de http.Request están formateadas como "[:: 1]: 53343"

Entonces net.SplitHostPort funciona genial:

paquete 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) }

La salida es:

127.0.0.1 5432 <nil> ::1 2345 <nil> localhost 1234 <nil>