欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Go語言開發(fā)一個 IP 歸屬地查詢接口工具

 更新時間:2025年09月22日 08:25:28   作者:程序員愛釣魚  
在日常開發(fā)中,IP 地址歸屬地查詢是一個常見需求,本文將帶大家使用 Go 語言快速開發(fā)一個 IP 歸屬地查詢接口服務(wù),有需要的小伙伴可以了解下

在日常開發(fā)中,IP 地址歸屬地查詢是一個常見需求:比如記錄用戶訪問日志時展示用戶的地理位置,或在安全防護系統(tǒng)中分析異常登錄來源。本文將帶你用 Go 語言快速開發(fā)一個 IP 歸屬地查詢接口服務(wù)。

功能目標(biāo)

提供一個 HTTP 接口,輸入 IP 地址返回歸屬地信息

支持查詢單個 IP,也可擴展成批量查詢

數(shù)據(jù)源可選擇:

  • 本地離線 IP 數(shù)據(jù)庫(如 ip2region
  • 第三方 API(如 ip-api、ipinfo 等)

結(jié)果返回 JSON 格式

技術(shù)棧

Go 標(biāo)準(zhǔn)庫net/http、encoding/json

第三方庫

github.com/lionsoul2014/ip2region/binding/golang/xdb —— 離線 IP 數(shù)據(jù)庫解析

存儲方式:使用本地 ip2region.xdb 文件

項目結(jié)構(gòu)

ip-lookup/
├── main.go
├── ip2region.xdb   # 離線數(shù)據(jù)庫文件
├── go.mod

核心代碼(main.go)

package main

import (
	"encoding/json"
	"log"
	"net"
	"net/http"

	"github.com/lionsoul2014/ip2region/binding/golang/xdb"
)

// 響應(yīng)結(jié)構(gòu)
type IPInfo struct {
	IP      string `json:"ip"`
	Region  string `json:"region"`
	Error   string `json:"error,omitempty"`
}

var searcher *xdb.Searcher

func main() {
	// 加載 ip2region 數(shù)據(jù)庫
	var err error
	searcher, err = xdb.NewWithFileOnly("ip2region.xdb")
	if err != nil {
		log.Fatalf("? 加載 ip2region.xdb 失敗: %v", err)
	}

	http.HandleFunc("/ip", queryIP)

	log.Println("? IP 歸屬地查詢服務(wù)已啟動: http://localhost:8080/ip?addr=1.1.1.1")
	http.ListenAndServe(":8080", nil)
}

func queryIP(w http.ResponseWriter, r *http.Request) {
	addr := r.URL.Query().Get("addr")
	if addr == "" {
		writeJSON(w, IPInfo{Error: "缺少參數(shù) addr"})
		return
	}

	if net.ParseIP(addr) == nil {
		writeJSON(w, IPInfo{IP: addr, Error: "無效的 IP 地址"})
		return
	}

	region, err := searcher.SearchByStr(addr)
	if err != nil {
		writeJSON(w, IPInfo{IP: addr, Error: err.Error()})
		return
	}

	writeJSON(w, IPInfo{IP: addr, Region: region})
}

func writeJSON(w http.ResponseWriter, data IPInfo) {
	w.Header().Set("Content-Type", "application/json")
	json.NewEncoder(w).Encode(data)
}

使用方法

1.初始化項目并安裝依賴

go mod init ip-lookup
go get github.com/lionsoul2014/ip2region/binding/golang/xdb

2.下載 ip2region.xdb 數(shù)據(jù)庫文件,放到項目根目錄

3.運行

go run main.go

4.請求示例

curl "http://localhost:8080/ip?addr=8.8.8.8"

返回結(jié)果示例:

{
  "ip": "8.8.8.8",
  "region": "美國|0|加利福尼亞|圣克拉拉|谷歌"
}

擴展功能

  • 批量查詢:支持上傳 IP 列表文件,返回批量結(jié)果
  • 緩存機制:對高頻 IP 查詢做緩存,提升性能
  • 前端展示:結(jié)合簡單前端頁面展示查詢結(jié)果
  • 多數(shù)據(jù)源支持:同時支持 ip2region 和第三方 API,作為備份

總結(jié)

通過本案例,我們實現(xiàn)了一個 IP 歸屬地查詢接口,使用 ip2region 離線庫做到快速查詢,性能高效且無需依賴外部服務(wù)。這個小工具既能單獨運行,也能嵌入到日志分析、Web 服務(wù)或安全監(jiān)控系統(tǒng)中使用,是 Go 項目開發(fā)中的一個實用模塊。

到此這篇關(guān)于基于Go語言開發(fā)一個 IP 歸屬地查詢接口工具的文章就介紹到這了,更多相關(guān)Go查詢IP歸屬地內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語言中常見的坑以及高性能編程技巧分享

    Go語言中常見的坑以及高性能編程技巧分享

    代碼的穩(wěn)健性、高性能、可讀性是我們每一位coder必須去追求的目標(biāo),本文結(jié)合Go語言的特性做了相關(guān)總結(jié),感興趣的小伙伴可以了解一下
    2023-06-06
  • go get 和 go install 對比介紹

    go get 和 go install 對比介紹

    go install和go get都是Go語言的工具命令,但它們之間有一些區(qū)別。go get:用于從遠(yuǎn)程代碼存儲庫(如 GitHub)中下載或更新Go代碼包。go install:用于編譯并安裝 Go 代碼包,本文go get和go install對比介紹的非常詳細(xì),需要的朋友可以參考一下
    2023-04-04
  • Golang干貨分享之利用AST實現(xiàn)AOP功能

    Golang干貨分享之利用AST實現(xiàn)AOP功能

    本文主要是一個純干貨分享,主要介紹了Golang如何利用AST實現(xiàn)AOP功能,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-04-04
  • golang調(diào)用windows平臺的dll庫的方法實現(xiàn)

    golang調(diào)用windows平臺的dll庫的方法實現(xiàn)

    本文主要介紹了golang調(diào)用windows平臺的dll庫的方法實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • 基于Go語言搭建靜態(tài)文件服務(wù)器的詳細(xì)教程

    基于Go語言搭建靜態(tài)文件服務(wù)器的詳細(xì)教程

    Go 是一個開源的編程語言,它能讓構(gòu)造簡單、可靠且高效的軟件變得容易,本文給大家介紹了基于Go語言搭建靜態(tài)文件服務(wù)器的詳細(xì)教程,文中通過圖文和代碼講解的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • 詳解Golang中select的使用與源碼分析

    詳解Golang中select的使用與源碼分析

    select?是?Go?提供的?IO?多路復(fù)用機制,可以用多個?case?同時監(jiān)聽多個?channl?的讀寫狀態(tài)。本文將從源碼角度帶大家了解一下select的使用,需要的可以參考一下
    2022-12-12
  • golang實現(xiàn)對JavaScript代碼混淆

    golang實現(xiàn)對JavaScript代碼混淆

    在Go語言中,你可以使用一些工具來混淆JavaScript代碼,一個常用的工具是Terser,它可以用于壓縮和混淆JavaScript代碼,你可以通過Go語言的`os/exec`包來調(diào)用Terser工具,本文給通過一個簡單的示例給大家介紹一下,感興趣的朋友可以參考下
    2024-01-01
  • 在Go語言項目中使用Zap日志庫的操作過程

    在Go語言項目中使用Zap日志庫的操作過程

    本文將先介紹Go語言原生的日志庫的使用,然后詳細(xì)介紹非常流行的Uber開源的zap日志庫,同時會介紹如何搭配·Lumberjack·實現(xiàn)日志的切割和歸檔,對Go使用Zap日志庫相關(guān)知識感興趣的朋友一起看看吧
    2024-03-03
  • Go語言使用讀寫OPC詳解

    Go語言使用讀寫OPC詳解

    這篇文章主要介紹了Go語言使用讀寫OPC詳解,圖文講解的很清晰,有感興趣的同學(xué)可以學(xué)習(xí)下
    2021-03-03
  • go使用snmp庫查詢mib數(shù)據(jù)案例代碼

    go使用snmp庫查詢mib數(shù)據(jù)案例代碼

    go語言使用snmp庫中的 k-sone/snmpgo 實現(xiàn)相關(guān)mib查詢,本文通過實例代碼給大家介紹了go使用snmp庫查詢mib數(shù)據(jù),感興趣的朋友跟隨小編一起看看吧
    2023-10-10

最新評論