首页 > 解决方案 > 从 net/http.Request.RemoteAddr 获取 IP 地址的最简洁方法是什么

问题描述

Golang net/http 库提供了一个Request struct,它是运行服务器时返回的对象。

该结构包括 RemoteAddr: 字符串。

这包含远程(客户端)IP 地址和客户端端口号。它当然可以是 IPv4 或 IPv6。

看到的 IPv6 示例值(当客户端在本地主机上时)是:

"[::1]:53947"

IPv4 示例是:

"127.0.0.1:54572"

是否有库函数可以将它们分解为主机和端口,或者是否有必要使用字符串操作?

标签: httpgo

解决方案


我认为您正在寻找net.SplitHostPort

func main() {
  host, _, _ := net.SplitHostPort("[::1]:53947")
  fmt.Println(host)
  host, _, _ = net.SplitHostPort("127.0.0.1:54572")
  fmt.Println(host)
}

https://play.golang.org/p/BuQRhD0sL54

由于您只需要主机,因此您可以_使用端口。如果您需要另辟蹊径,还有net.JoinHostPort


推荐阅读