go中如何获取本机ip地址

 更新时间:2023年09月18日 09:06:12   作者:L小象  
这篇文章主要介绍了go中如何获取本机ip地址问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

go获取本机ip地址

获取本机ip的方法:

 
//获取ip
func externalIP() (net.IP, error) {
	ifaces, err := net.Interfaces()
	if err != nil {
		return nil, err
	}
	for _, iface := range ifaces {
		if iface.Flags&net.FlagUp == 0 {
			continue // interface down
		}
		if iface.Flags&net.FlagLoopback != 0 {
			continue // loopback interface
		}
		addrs, err := iface.Addrs()
		if err != nil {
			return nil, err
		}
		for _, addr := range addrs {
			ip := getIpFromAddr(addr)
			if ip == nil {
				continue
			}
			return ip, nil
		}
	}
	return nil, errors.New("connected to the network?")
}
//获取ip
func getIpFromAddr(addr net.Addr) net.IP {
	var ip net.IP
	switch v := addr.(type) {
	case *net.IPNet:
		ip = v.IP
	case *net.IPAddr:
		ip = v.IP
	}
	if ip == nil || ip.IsLoopback() {
		return nil
	}
	ip = ip.To4()
	if ip == nil {
		return nil // not an ipv4 address
	}
	return ip
}

调用:

func main() {
	ip, err := externalIP()
	if err != nil {
		fmt.Println(err)
	}
	fmt.Printf(ip.String())
}

结果:

Golang获取本机的Mac 和ip地址

获取本机的Mac 和ip地址

1.获取本机的MAC地址

代码如下(示例):

 func GetLocalMac() (mac string) {
	// 获取本机的MAC地址
	interfaces, err := net.Interfaces()
 	if err != nil {
		panic("Poor soul, here is what you got: " + err.Error())
 	}
	for _, inter := range interfaces {
 		fmt.Println(inter.Name)
 		mac := inter.HardwareAddr //获取本机MAC地址
 		fmt.Println("MAC ===== ", mac)
 	}
 	fmt.Println("MAC = ", mac)
	return mac
}

2.获取本机ip地址

代码如下(示例):

 //获取本机ip地址
 func GetIps() (ips []string) {
 	interfaceAddr, err := net.InterfaceAddrs()
 	if err != nil {
 		fmt.Printf("fail to get net interfaces ipAddress: %v\n", err)
 		return ips
 	}
 	for _, address := range interfaceAddr {
 		ipNet, isVailIpNet := address.(*net.IPNet)
 		if isVailIpNet && !ipNet.IP.IsLoopback() {
 			if ipNet.IP.To4() != nil {
 				ips = append(ips, ipNet.IP.String())
 			}
		}
	}
	fmt.Println("ips = ", ips)
	return ips
 }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • golang之数据校验的实现代码示例

    golang之数据校验的实现代码示例

    这篇文章主要介绍了golang之数据校检的实现代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • go实现图片拼接与文字书写的方法实例

    go实现图片拼接与文字书写的方法实例

    这篇文章主要给大家介绍了关于go实现图片拼接与文字书写的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • Go语言从单体服务到微服务设计方案详解

    Go语言从单体服务到微服务设计方案详解

    这篇文章主要为大家介绍了Go语言从单体服务到微服务设计方案详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Go语言实现多协程文件下载器的过程详解

    Go语言实现多协程文件下载器的过程详解

    这篇文章主要介绍了Go语言实现多协程文件下载器的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-08-08
  • Go中的new()和make()函数区别及底层原理详解

    Go中的new()和make()函数区别及底层原理详解

    这篇文章主要为大家介绍了Go中的new()和make()函数区别及底层原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • golang xorm日志写入文件中的操作

    golang xorm日志写入文件中的操作

    这篇文章主要介绍了golang xorm日志写入文件中的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • 探索Golang Redis实现发布订阅功能实例

    探索Golang Redis实现发布订阅功能实例

    这篇文章主要介绍了Golang Redis发布订阅功能实例探索,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • go语言实现markdown解析库的方法示例

    go语言实现markdown解析库的方法示例

    这篇文章主要介绍了go语言实现markdown解析库的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • go语言base64加密解密的方法

    go语言base64加密解密的方法

    这篇文章主要介绍了go语言base64加密解密的方法,实例分析了Go语言base64加密解密的技巧,需要的朋友可以参考下
    2015-03-03
  • go语言中的Carbon库时间处理技巧

    go语言中的Carbon库时间处理技巧

    这篇文章主要介绍了go语言中的Carbon库时间处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02

最新评论