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
 }

总结

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

相关文章

  • 浅谈Go Channel 高级实践

    浅谈Go Channel 高级实践

    这篇文章主要介绍了浅谈Go Channel 高级实践,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Golang 语言控制并发 Goroutine的方法

    Golang 语言控制并发 Goroutine的方法

    本文我们介绍了不同场景中分别适合哪种控制并发 goroutine 的方式,其中,channel 适合控制少量 并发 goroutine,WaitGroup 适合控制一组并发 goroutine,而 context 适合控制多级并发 goroutine,感兴趣的朋友跟随小编一起看看吧
    2021-06-06
  • go REST API设计模式和反模式示例解析

    go REST API设计模式和反模式示例解析

    在这篇文章中,我们将探讨一些常见的REST API设计模式和开发者应该注意的反模式,我们还将提供Golang和Open API Schema的代码片段来帮助说明这些概念,有需要的朋友可以借鉴参考下
    2023-09-09
  • Golang实现图片上传功能的示例代码

    Golang实现图片上传功能的示例代码

    这篇文章主要和大家分享一下如何利用Golang实现图片上传功能,文中的实现步骤讲解详细,对我们学习有一定的参考价值,需要的可以参考一下
    2022-05-05
  • Go语言二进制文件的读写操作

    Go语言二进制文件的读写操作

    本文主要介绍了Go语言二进制文件的读写操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Go net/http/pprof分析内存泄露及解决过程

    Go net/http/pprof分析内存泄露及解决过程

    这篇文章主要介绍了Go net/http/pprof分析内存泄露及解决过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Go语言切片常考的面试真题解析

    Go语言切片常考的面试真题解析

    了解最新的Go语言面试题型,让面试不再是难事,下面这篇文章主要给大家介绍了关于Go语言切片面试常考的一些问题,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • go程序执行交叉编译的流程步骤

    go程序执行交叉编译的流程步骤

    go程序可用通过交叉编译的方式在一个平台输出多个平台可运行的二进制包,本文给大家详细介绍了go程序执行交叉编译的流程步骤,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2024-07-07
  • 关于golang test缓存问题

    关于golang test缓存问题

    这篇文章主要介绍了关于golang test缓存问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • 详解Golang中链表的创建和读取

    详解Golang中链表的创建和读取

    这篇文章主要为大家详细介绍了Golang中链表的创建和读取的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起了解下
    2023-12-12

最新评论