在Python中,可以拆分字符串并将其分配给变量:
ip, port = '127.0.0.1:5432'.split(':')
Run Code Online (Sandbox Code Playgroud)
但在Golang它似乎不起作用:
ip, port := strings.Split("127.0.0.1:5432", ":")
// assignment count mismatch: 2 = 1
Run Code Online (Sandbox Code Playgroud)
问题:如何拆分字符串并一步指定值?
pet*_*rSO 229
例如,两个步骤,
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)
}
Run Code Online (Sandbox Code Playgroud)
输出:
127.0.0.1 5432
Run Code Online (Sandbox Code Playgroud)
例如,一步
package main
import (
"fmt"
"net"
)
func main() {
host, port, err := net.SplitHostPort("127.0.0.1:5432")
fmt.Println(host, port, err)
}
Run Code Online (Sandbox Code Playgroud)
输出:
127.0.0.1 5432 <nil>
Run Code Online (Sandbox Code Playgroud)
Bab*_*aba 20
由于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
}
Run Code Online (Sandbox Code Playgroud)
像RemoteAddr
from http.Request
这样的字段的IPv6地址格式为"[:: 1]:53343"
所以net.SplitHostPort
伟大工程:
包主
package main
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)
}
Run Code Online (Sandbox Code Playgroud)
输出是:
127.0.0.1 5432 <nil>
::1 2345 <nil>
localhost 1234 <nil>
Run Code Online (Sandbox Code Playgroud)