在 Go 语言中,可以通过 net 包来获取当前用户的 IP 地址。以下是一个示例: ```go package main import ( "fmt" "net" "net/http" ) func main() { // 创建一个 HTTP 服务器 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // 获取当前用户的 IP 地址 ip, _, err := net.SplitHostPort(r.RemoteAddr) if err != nil { fmt.Printf("获取用户 IP 地址失败:%v\n", err) return } fmt.Fprintf(w, "您的 IP 地址是:%s", ip) }) // 启动 HTTP 服务器 fmt.Println("服务器已启动,监听端口 8080...") http.ListenAndServe(":8080", nil) } ``` 在这个示例中,我们创建了一个简单的 HTTP 服务器,并在请求处理函数中通过 r.RemoteAddr 获取了当前用户的 IP 地址。由于 r.RemoteAddr 的值是一个字符串,包含了用户的 IP 地址和端口号,我们使用 net.SplitHostPort 函数将它们分开,只保留 IP 地址部分。 需要注意的是,r.RemoteAddr 并不是一个可靠的值,因为它可以被伪造。如果需要获取真实的用户 IP 地址,可以考虑使用反向代理服务器或负载均衡器提供的 HTTP 头信息。例如,如果使用 Nginx 作为反向代理服务器,可以通过 X-Real-IP 或 X-Forwarded-For 头信息来获取真实的用户 IP 地址。以下是一个示例: ```go package main import ( "fmt" "net/http" ) func main() { // 创建一个 HTTP 服务器 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // 获取真实的用户 IP 地址 ip := r.Header.Get("X-Real-IP") if ip == "" { ip = r.Header.Get("X-Forwarded-For") } if ip == "" { ip = r.RemoteAddr } fmt.Fprintf(w, "您的 IP 地址是:%s", ip) }) // 启动 HTTP 服务器 fmt.Println("服务器已启动,监听端口 8080...") http.ListenAndServe(":8080", nil) } ``` 在这个示例中,我们通过 r.Header.Get 方法获取了 X-Real-IP 和 X-Forwarded-For 头信息,如果都不存在则使用 r.RemoteAddr 获取用户 IP 地址。