This is a creation in Article, where the information may have evolved or changed.
package mainimport ("Flag" "FMT" "IO" "NET" "Net/http" "OS") Var get_ip = flag. String ("Get_ip", "", "External|internal") Func main () {fmt. Println ("usage of ./getmyip --get_ip= (external|internal)") flag. Parse () if *get_ip == "external" {get_external ()}if *get_ip == "internal" {get_internal ()}}func get_external () {resp, err := http. Get ("Http://myexternalip.com/raw") If err != nil {os. Stderr.writestring (Err. Error ()) OS. Stderr.writestring ("\ n") os. Exit (1)}defer resp. Body.close () Io. Copy (OS. Stdout, resp. Body) OS. Exit (0)}func get_internal () {addrs, err := net. Interfaceaddrs () If err != nil {os. Stderr.writestring ("Oops:" + err. Error ()) OS. Exit (1)}for _, a := range addrs {if ipnet, ok := a. (*net. ipnet); ok && !ipnet. Ip. Isloopback () {if ipnet. Ip. To4 () != nil {os. Stdout.writestring (ipnet. Ip. String () + "\ n")}}}os. Exit (0)}