亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go語(yǔ)言中獲取IP地址的方法小結(jié)

 更新時(shí)間:2023年12月06日 14:25:01   作者:落雷  
這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言中獲取IP地址的常用方法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

1. 獲取本地IP地址

使用 net 包可以獲取本地機(jī)器的 IP 地址。以下是一個(gè)獲取本地 IP 地址的簡(jiǎn)單示例:

package main
 
import (
	"fmt"
	"net"
)
 
func main() {
	// 獲取所有網(wǎng)絡(luò)接口
	interfaces, err := net.Interfaces()
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
 
	// 遍歷所有網(wǎng)絡(luò)接口
	for _, iface := range interfaces {
		// 排除一些特殊接口
		if iface.Flags&net.FlagUp == 0 || iface.Flags&net.FlagLoopback != 0 {
			continue
		}
 
		// 獲取接口的地址信息
		addrs, err := iface.Addrs()
		if err != nil {
			fmt.Println("Error:", err)
			continue
		}
 
		// 遍歷接口的地址
		for _, addr := range addrs {
			// 檢查地址類型
			switch v := addr.(type) {
			case *net.IPNet:
				// IPv4 或 IPv6 地址
				fmt.Println(v.IP)
			case *net.IPAddr:
				// 一般情況下是 IPv4 地址
				fmt.Println(v.IP)
			}
		}
	}
}

2. 使用 net/http 獲取客戶端 IP

在 Go 中,可以使用 net/http 包中的 Request 結(jié)構(gòu)體來(lái)獲取客戶端的 IP 地址。具體來(lái)說(shuō),Request 結(jié)構(gòu)體中的 RemoteAddr 字段包含了客戶端的 IP 地址和端口號(hào)。

type Request struct {
    ...
    // RemoteAddr allows HTTP servers and other software to record
	// the network address that sent the request, usually for
	// logging. This field is not filled in by ReadRequest and
	// has no defined format. The HTTP server in this package
	// sets RemoteAddr to an "IP:port" address before invoking a
	// handler.
	// This field is ignored by the HTTP client.
	RemoteAddr string
    ...
}

以下是一個(gè)簡(jiǎn)單的示例:

package main
 
import (
	"fmt"
	"net/http"
)
 
func main() {
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		// 通過(guò) RemoteAddr 獲取客戶端的 IP 地址和端口號(hào)
		ip, _, err := net.SplitHostPort(r.RemoteAddr)
		if err != nil {
			fmt.Println("Error extracting IP:", err)
			return
		}
 
		fmt.Fprintf(w, "Client IP: %s", ip)
	})
 
	// 啟動(dòng) HTTP 服務(wù)器,監(jiān)聽在 8080 端口
	http.ListenAndServe(":8080", nil)
}

在這個(gè)例子中,r.RemoteAddr 包含了客戶端的 IP 地址和端口號(hào),使用 net.SplitHostPort 函數(shù)可以方便地從這個(gè)字符串中提取出 IP 地址。請(qǐng)注意,由于這個(gè)方法使用 TCP 連接的信息,所以對(duì)于某些代理服務(wù)器或負(fù)載均衡器,它可能只是代理服務(wù)器的 IP 地址,而不是實(shí)際客戶端的 IP 地址。在這種情況下,可能需要查看 HTTP 頭部中的相關(guān)字段以獲取真實(shí)的客戶端 IP 地址。

3. 使用 gin 獲取客戶端 IP

在 Gin 框架中,可以通過(guò) c.ClientIP() 方法獲取客戶端的 IP 地址。這個(gè)方法會(huì)嘗試從不同的來(lái)源獲取 IP 地址,包括 X-Forwarded-For 頭部、X-Real-IP 頭部以及連接的遠(yuǎn)程地址。

// ClientIP implements one best effort algorithm to return the real client IP. 
// It calls c.RemoteIP() under the hood, to check if the remote IP is a trusted proxy or not. 
// If it is it will then try to parse the headers defined in Engine.RemoteIPHeaders (defaulting to [X-Forwarded-For, X-Real-Ip]). 
// If the headers are not syntactically valid OR the remote IP does not correspond to a trusted proxy, the remote IP (coming from Request.RemoteAddr) is returned.
func (c *Context) ClientIP() string

以下是一個(gè)簡(jiǎn)單的示例:

package main
 
import (
	"github.com/gin-gonic/gin"
	"net/http"
)
 
func main() {
	r := gin.Default()
 
	r.GET("/", func(c *gin.Context) {
		// 獲取客戶端的 IP 地址
		clientIP := c.ClientIP()
 
		c.String(http.StatusOK, "Client IP: %s", clientIP)
	})
 
	// 啟動(dòng) Gin 服務(wù)器,監(jiān)聽在 8080 端口
	r.Run(":8080")
}

在這個(gè)例子中,c.ClientIP() 會(huì)自動(dòng)處理不同的頭部并返回客戶端的 IP 地址。如果的應(yīng)用程序部署在代理服務(wù)器或負(fù)載均衡器之后,確保這些設(shè)備正確地設(shè)置了 X-Forwarded-For 或 X-Real-IP 頭部,以便正確獲取客戶端的 IP 地址。

到此這篇關(guān)于Go語(yǔ)言中獲取IP地址的方法小結(jié)的文章就介紹到這了,更多相關(guān)Go獲取IP地址內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang設(shè)計(jì)模式之責(zé)任鏈模式講解和代碼示例

    Golang設(shè)計(jì)模式之責(zé)任鏈模式講解和代碼示例

    責(zé)任鏈?zhǔn)且环N行為設(shè)計(jì)模式, 允許你將請(qǐng)求沿著處理者鏈進(jìn)行發(fā)送, 直至其中一個(gè)處理者對(duì)其進(jìn)行處理,本文就詳細(xì)給大家介紹一下Golang 責(zé)任鏈模式,文中有詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-06-06
  • Golang?統(tǒng)計(jì)字符串中數(shù)字字母數(shù)量的實(shí)現(xiàn)方法

    Golang?統(tǒng)計(jì)字符串中數(shù)字字母數(shù)量的實(shí)現(xiàn)方法

    這篇文章主要介紹了Golang?統(tǒng)計(jì)字符串中數(shù)字字母數(shù)量,本文給出了兩種從字符串獲取數(shù)字與字母數(shù)量的方法,分別是ASCII 碼值和正則表達(dá)式,需要的朋友可以參考下
    2022-06-06
  • Go語(yǔ)言學(xué)習(xí)之操作MYSQL實(shí)現(xiàn)CRUD

    Go語(yǔ)言學(xué)習(xí)之操作MYSQL實(shí)現(xiàn)CRUD

    Go官方提供了database包,database包下有sql/driver。該包用來(lái)定義操作數(shù)據(jù)庫(kù)的接口,這保證了無(wú)論使用哪種數(shù)據(jù)庫(kù),操作方式都是相同的。本文就來(lái)和大家聊聊Go語(yǔ)言如何操作MYSQL實(shí)現(xiàn)CRUD,希望對(duì)大家有所幫助
    2023-02-02
  • go語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之前綴樹Trie

    go語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之前綴樹Trie

    這篇文章主要介紹了go語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之前綴樹Trie,文章圍繞主題展開詳細(xì)內(nèi)容介紹,具有一定得參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • Go中g(shù)routine通信與context控制實(shí)例詳解

    Go中g(shù)routine通信與context控制實(shí)例詳解

    隨著context包的引入,標(biāo)準(zhǔn)庫(kù)中很多接口因此加上了context參數(shù),下面這篇文章主要給大家介紹了關(guān)于Go中g(shù)routine通信與context控制的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • golang?日志庫(kù)ZAP[uber-go?zap]示例詳解

    golang?日志庫(kù)ZAP[uber-go?zap]示例詳解

    ZAP是由Uber開源的高性能Go語(yǔ)言日志庫(kù),支持多種日志級(jí)別及基本信息打印,雖然ZAP本身不支持日志分割,但可以結(jié)合lumberjack進(jìn)行日志切割,實(shí)現(xiàn)日志按文件大小、時(shí)間或間隔切割等功能,ZAP提供Logger和SugaredLogger兩種日志記錄器
    2024-10-10
  • Go語(yǔ)言字符串基礎(chǔ)示例詳解

    Go語(yǔ)言字符串基礎(chǔ)示例詳解

    這篇文章主要為大家介紹了Go語(yǔ)言字符串基礎(chǔ)的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-11-11
  • go的切片擴(kuò)容機(jī)制詳解

    go的切片擴(kuò)容機(jī)制詳解

    本文主要介紹了go的切片擴(kuò)容機(jī)制詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Golang線上內(nèi)存爆掉問(wèn)題排查(pprof)與解決

    Golang線上內(nèi)存爆掉問(wèn)題排查(pprof)與解決

    這篇文章主要介紹了Golang線上內(nèi)存爆掉問(wèn)題排查(pprof)與解決,涉及到數(shù)據(jù)敏感,文中代碼是我模擬線上故障的一個(gè)情況,好在我們程序都有添加pprof監(jiān)控,于是直接通過(guò)go tool pprof分析,需要的朋友可以參考下
    2024-04-04
  • Golang調(diào)用FFmpeg轉(zhuǎn)換視頻流的實(shí)現(xiàn)

    Golang調(diào)用FFmpeg轉(zhuǎn)換視頻流的實(shí)現(xiàn)

    本文主要介紹了Golang調(diào)用FFmpeg轉(zhuǎn)換視頻流,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評(píng)論