如何拆分字符串并将其分配给Golang中的变量?

Pyt*_*Pyt 144 string split go

在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)

  • 如果我们获得IPv6地址会发生什么? (4认同)

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)

  • 我喜欢Go但我不会称之为_flexible_:D (13认同)

Gle*_*hoe 7

RemoteAddrfrom 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)