How to get external IPv4/IPv6 address in Go
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