//go:build fetch_public_ip package config import ( "encoding/json" "io" "net" "net/http" "strings" "time" ) func FetchPublicIPAddress() string { client := &http.Client{Timeout: 5 * time.Second} resp, err := client.Get("https://api.ipify.org?format=json") if err != nil { return "" } defer resp.Body.Close() if resp.StatusCode < 200 || resp.StatusCode >= 300 { return "" } body, err := io.ReadAll(io.LimitReader(resp.Body, 256)) if err != nil { return "" } var payload struct { IP string `json:"ip"` } if err := json.Unmarshal(body, &payload); err != nil { return "" } ip := strings.TrimSpace(payload.IP) if net.ParseIP(ip) == nil { return "" } return ip }