在golang中,在字符或字符串之前从字符串中grep子字符串的最佳方法

在golang中,在字符或字符串之前从字符串中grep子字符串的最佳方法,go,Go,我得到的net.Conn.RemoteAddr()如下所示: 我只需要没有端口号的IP地址 ... str := conn.RemoteAddr().String() strSlice := strings.Split(str, ":") ipAddress := strSlice[0] ... 有什么简单的方法吗?您可以像这样使用net.SplitHostPort ip, _, err := net.SplitHostPort(conn.RemoteAddr().String()) if e

我得到的net.Conn.RemoteAddr()如下所示:

我只需要没有端口号的IP地址

...
str := conn.RemoteAddr().String()
strSlice := strings.Split(str, ":")
ipAddress := strSlice[0]
...

有什么简单的方法吗?

您可以像这样使用
net.SplitHostPort

ip, _, err := net.SplitHostPort(conn.RemoteAddr().String())
if err != nil {
    fmt.Println(err)
    return
}
fmt.Println(ip)
试穿一下

为了回答OP在上述评论中提出的问题,
net.SplitHostPort
已经在处理IPv6。给定字符串

net.SplitHostPort("[2001:db8:85a3:0:0:8a2e:370]:7334")

将按预期工作。

您可以使用
net.SplitHostPort
,如下所示

ip, _, err := net.SplitHostPort(conn.RemoteAddr().String())
if err != nil {
    fmt.Println(err)
    return
}
fmt.Println(ip)
试穿一下

为了回答OP在上述评论中提出的问题,
net.SplitHostPort
已经在处理IPv6。给定字符串

net.SplitHostPort("[2001:db8:85a3:0:0:8a2e:370]:7334")

将按预期工作。

比3行简单?ipAddress:=strings.Split(conn.Remoteddr().String(),“:”[0]@GarMan它看起来仍然很难看(我必须自己包装这些东西吗?顺便说一句:OPs和GarMans的代码不能用。)IPv6@DanieleD那么,如果我们使用IPv6,如何解决问题?比3行更简单?ipAddress:=strings.Split(conn.Remoteddr().String(),“:”[0]@GarMan它看起来仍然很难看(我必须自己包装这些东西吗?顺便说一句:OPs和GarMans的代码不能用。)IPv6@DanieleD那么,如果我们采用IPv6,如何解决这个问题呢?