对于使用golang的开发人员来说,获取本机IP是一项基本的操作。在这篇文章中,我们将从多个方面深入探讨如何使用golang获取本机IP。

一、使用net包获取本机IP

使用golang的net包可以很容易地获取本机IP。

    
    package main
    
    import (
        "fmt"
        "net"
    )
    
    func main() {
        addrs, err := net.InterfaceAddrs()
        if err != nil {
            fmt.Println(err)
            return
        }

        for _, address := range addrs {
            // 检查IP地址,其他类型的地址(如link-local或者loopback)忽略
            if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() && ipnet.IP.To4() != nil {
                fmt.Println(ipnet.IP.String())
            }
        }
    }
    

上述代码中,我们首先通过net.InterfaceAddrs()函数获取了所有interface的地址。然后,我们遍历这些地址,并且筛选出IPv4类型的地址,并将其打印出来。如果你想获取IPv6地址,你可以将To4()函数改为To16()。

二、使用os包获取本机IP

os包也提供了获取本机IP的函数。

    
    package main
    
    import (
        "fmt"
        "net"
        "os"
    )
    
    func main() {
        hostname, err := os.Hostname()
        if err != nil {
            fmt.Println(err)
            return
        }
    
        ips, err := net.LookupIP(hostname)
        if err != nil {
            fmt.Println(err)
            return
        }
    
        for _, ip := range ips {
            fmt.Println(ip)
        }
    }
    

上述代码中,我们首先通过os.Hostname()函数获取本机的主机名。接着,我们使用net.LookupIP()函数将主机名解析为IP地址,并将其打印出来。

三、使用第三方包获取本机IP

除了使用golang的标准库包外,还可以使用一些第三方包来获取本机IP。例如,go-zero/netx包就提供了获取本机IP的函数。

    
    package main
    
    import (
        "fmt"
        "github.com/tal-tech/go-zero/core/netx"
    )
    
    func main() {
        ip := netx.InternalIP()
        fmt.Println(ip)
    }
    

上述代码中,我们引入了go-zero/netx包,并且使用其提供的InternalIP()函数来获取本机IP。

结尾

本篇文章详细介绍了使用golang获取本机IP的三种方法,不同的方法适合不同的场景。希望这篇文章能够帮助您更好地完成golang开发中的任务。