You can use IPIfy’s HTTP API within Go:
import ( "io/ioutil" "net/http" ) func GetExternalIPv4Address() (string, error) { // Perform request resp, err := http.Get("https://api4.ipify.org") if err != nil { return "", err } // Cleanup when this function ends defer resp.Body.Close() // Read all the response data into a []byte body, err := ioutil.ReadAll(resp.Body) // Decode & print return string(body), nil } func GetExternalIPv6Address() (string, error) { // Perform request resp, err := http.Get("https://api6.ipify.org") if err != nil { return "", err } // Cleanup when this function ends defer resp.Body.Close() // Read all the response data into a []byte body, err := ioutil.ReadAll(resp.Body) // Decode & print return string(body), nil }
Usage example:
package main func main() { v4, _ := GetExternalIPv4Address() v6, _ := GetExternalIPv6Address() println(v4) println(v6) }
If you save both files in a directory named GoIPAddress, you can run
$ go build $ ./GOIPAddress 31.190.168.110 2a03:4012:2:1022::1