最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言中獲取IP地址的方法詳解

 更新時間:2023年11月21日 11:30:49   作者:shura1014  
這篇文章主要為大家詳細介紹了Go語言中獲取IP地址的相關方法,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以跟隨小編一起學習一下

簡介

在net包中提供了獲取所有網卡的ip,一般不會用127.0.0.1,::1這樣的本地回環(huán)地址,可以過濾掉,如果想要獲取當前真正在使用的地址,得通過net.Dail去連一下才知道

獲取ip地址

func main() {
	fmt.Println(getIpv4())
	fmt.Println(getIpv6())
}

func getIpv4() []string {
	ips := make([]string, 0)
	for _, ip := range GetAllIp() {
		if ip.IP.To4() != nil {
			ips = append(ips, ip.IP.String())
		}
	}
	return ips
}

func getIpv6() []string {
	ips := make([]string, 0)
	for _, ip := range GetAllIp() {
		if ip.IP.To16() != nil {
			ips = append(ips, ip.IP.String())
		}
	}
	return ips
}

func GetAllIp() []*net.IPNet {
	ips := make([]*net.IPNet, 0)
	addrs, _ := net.InterfaceAddrs()
	for _, addr := range addrs {
		// 過濾調本地回環(huán)地址
		if ip, ok := addr.(*net.IPNet); ok && !ip.IP.IsLoopback() {
			ips = append(ips, ip)
		}
	}
	return ips
}

獲取正在使用的地址

通過net.Dial去連一下自然就能知道自己用的是哪個地址,使用udp去連地址可以隨便寫,只要符合規(guī)范

func main() {
	fmt.Println(GetUseIp())
}

func GetUseIp() string {
	dial, err := net.Dial("udp", "8.8.8.8:80") // Google的公共DNS服務器
	if err != nil {
		return "127.0.0.1"
	}
	addr := dial.LocalAddr().String()

	index := strings.LastIndex(addr, ":")
	return addr[:index]
}

執(zhí)行輸出

172.20.131.124

方法補充

1、借助 net.InterfaceAddrs 方法(多網卡時,不推薦)

簡單示例代碼如下:

package main
 
import (
	"fmt"
	"net"
)
 
func main() {
	ip := getHostIp()
	fmt.Println(ip)
}

func getHostIp() string {
	addrList, err := net.InterfaceAddrs()
	if err != nil {
		fmt.Println("get current host ip err: ", err)
		return ""
	}
	var ip string
	for _, address := range addrList {
		if ipNet, ok := address.(*net.IPNet); ok && !ipNet.IP.IsLoopback() {
			if ipNet.IP.To4() != nil {
				ip = ipNet.IP.String()
				break
			}
		}
	}
	return ip
}

2、借助 net.Dial 方法(推薦)

使用 udp 不需要關注是否送達,只需要對應的 ip 和 port 正確,即可獲取到 IP 地址。簡單示例代碼如下:

package main
 
import (
	"fmt"
	"net"
	"strings"
)
 
func main() {
	ip := getHostIp()
	fmt.Println(ip)
}

func getHostIp() string {
	conn, err := net.Dial("udp", "8.8.8.8:53")
	if err != nil {
		fmt.Println("get current host ip err: ", err)
		return ""
	}
	addr := conn.LocalAddr().(*net.UDPAddr)
	ip := strings.Split(addr.String(), ":")[0]
	return ip
}

到此這篇關于Go語言中獲取IP地址的方法詳解的文章就介紹到這了,更多相關Go獲取IP地址內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 一文詳解Go語言中的Option設計模式

    一文詳解Go語言中的Option設計模式

    這篇文章主要為大家詳細介紹了Go語言中Option設計模式的相關知識,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的可以了解一下
    2023-05-05
  • Go語言基礎函數基本用法及示例詳解

    Go語言基礎函數基本用法及示例詳解

    這篇文章主要為大家介紹了Go語言基礎函數基本用法及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2021-11-11
  • Golang 如何解析和生成json

    Golang 如何解析和生成json

    這篇文章主要介紹了Golang 如何解析和生成json,幫助大家更好的理解和學習golang,感興趣的朋友可以了解下
    2020-09-09
  • Golang的strings.Split()踩坑記錄

    Golang的strings.Split()踩坑記錄

    工作中,當我們需要對字符串按照某個字符串切分成字符串數組數時,常用到strings.Split(),本文主要介紹了Golang的strings.Split()踩坑記錄,感興趣的可以了解一下
    2022-05-05
  • 使用Golang快速構建出命令行應用程序

    使用Golang快速構建出命令行應用程序

    在日常開發(fā)中,大家對命令行工具(CLI)想必特別熟悉了,如果說你不知道命令工具,那你可能是個假開發(fā)。每天都會使用大量的命令行工具,例如最常用的Git、Go、Docker等,這篇文章主要介紹了使用Golang快速構建出命令行應用程序,需要的朋友可以參考下
    2023-02-02
  • 淺析Go項目中的依賴包管理與Go?Module常規(guī)操作

    淺析Go項目中的依賴包管理與Go?Module常規(guī)操作

    這篇文章主要為大家詳細介紹了Go項目中的依賴包管理與Go?Module常規(guī)操作,文中的示例代碼講解詳細,對我們深入了解Go語言有一定的幫助,需要的可以跟隨小編一起學習一下
    2023-10-10
  • vscode插件設置之Golang開發(fā)環(huán)境配置全過程

    vscode插件設置之Golang開發(fā)環(huán)境配置全過程

    go語言開發(fā)選擇vscode作為IDE工具也是一個不錯的選擇,下面這篇文章主要給大家介紹了關于vscode插件設置之Golang開發(fā)環(huán)境配置的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • 使用Go語言發(fā)送郵件的示例代碼

    使用Go語言發(fā)送郵件的示例代碼

    很多朋友想試試用Go語言發(fā)送郵件,所以接下來小編給大家介紹一下如何用Go語言發(fā)送郵件,文中通過代碼實例講解的非常詳細,需要的朋友可以參考下
    2023-07-07
  • Golang實現Md5校驗的代碼示例

    Golang實現Md5校驗的代碼示例

    最近項目中有個需求,就是地圖文件下發(fā)后,接收方需要文件的md5值,和接收到的文件做比對,以免文件不完整,引起bug,于是測試了下本地文件和遠程文件的md5計算,所以本文給大家介紹了Golang實現Md5校驗,需要的朋友可以參考下
    2024-07-07
  • Go語言實現遺傳算法的實例代碼

    Go語言實現遺傳算法的實例代碼

    Go 是一個開源的編程語言,它能讓構造簡單、可靠且高效的軟件變得容易。本文將重點介紹如何用Go語言實現遺傳算法。如果你還沒有參加過GoLang Tour,我還建議你快速看一下這門語言的介紹
    2017-11-11

最新評論

新民市| 昌邑市| 电白县| 江口县| 甘孜| 肥城市| 临武县| 乐业县| 儋州市| 黄石市| 柳林县| 焉耆| 万全县| 澜沧| 峨山| 龙川县| 伊金霍洛旗| 北京市| 阿合奇县| 凤翔县| 腾冲县| 正阳县| 周至县| 黄梅县| 南皮县| 甘孜县| 崇义县| 彰武县| 雅安市| 屯门区| 和平县| 西安市| 浮山县| 永城市| 甘德县| 乐清市| 宾川县| 库伦旗| 寿光市| 项城市| 驻马店市|