Как разделить строку и назначить ее переменным в Golang?
в Python можно разделить строку и присвоить ее переменные:
ip, port = '127.0.0.1:5432'.split(':')
но в Golang это, кажется, не работает:
ip, port := strings.Split("127.0.0.1:5432", ":")
// assignment count mismatch: 2 = 1
вопрос: как разделить строку и присвоить значения за один шаг?
4 ответов:
два шага, например,
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) }выход:
127.0.0.1 5432один шаг, например,
package main import ( "fmt" "net" ) func main() { host, port, err := net.SplitHostPort("127.0.0.1:5432") fmt.Println(host, port, err) }выход:
127.0.0.1 5432 <nil>
С
goгибкий вы можете создать свой собственный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 }
IPv6-адреса для таких полей, как
RemoteAddrСhttp.Requestформатируются как "[::1]:53343"так
net.SplitHostPortработает:основной пакет
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) }вывод:
127.0.0.1 5432 <nil> ::1 2345 <nil> localhost 1234 <nil>
есть несколько способов разбивать строку :
- если вы хотите сделать его временным, то разделить такой:
_
import net package host, port, err := net.SplitHostPort("0.0.0.1:8080") if err != nil { fmt.Println("Error is splitting : "+err.error()); //do you code here } fmt.Println(host, port)
Сплит на основе структуры:
- создать структуру и разделить, как это
_
type ServerDetail struct { Host string Port string err error } ServerDetail = net.SplitHostPort("0.0.0.1:8080") //Specific for Host and Portтеперь использовать в вас код, как
ServerDetail.HostиServerDetail.Portесли вы не хотите разбивать конкретную строку, сделайте это так это:
type ServerDetail struct { Host string Port string } ServerDetail = strings.Split([Your_String], ":") // Common split methodи как
ServerDetail.HostиServerDetail.Port.вот и все.
Comments