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

基于Go語(yǔ)言開(kāi)發(fā)一個(gè) IP 歸屬地查詢接口工具

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

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

功能目標(biāo)

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

支持查詢單個(gè) IP,也可擴(kuò)展成批量查詢

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

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

結(jié)果返回 JSON 格式

技術(shù)棧

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

第三方庫(kù)

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

存儲(chǔ)方式:使用本地 ip2region.xdb 文件

項(xiàng)目結(jié)構(gòu)

ip-lookup/
├── main.go
├── ip2region.xdb   # 離線數(shù)據(jù)庫(kù)文件
├── 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ù)庫(kù)
	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ù)已啟動(dòng): 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: "無(wú)效的 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.初始化項(xiàng)目并安裝依賴

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

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

3.運(yùn)行

go run main.go

4.請(qǐng)求示例

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

返回結(jié)果示例:

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

擴(kuò)展功能

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

總結(jié)

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

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

相關(guān)文章

  • Golang使用bcrypt實(shí)現(xiàn)密碼加密和校驗(yàn)的操作代碼

    Golang使用bcrypt實(shí)現(xiàn)密碼加密和校驗(yàn)的操作代碼

    bcrypt可以用于數(shù)據(jù)庫(kù)中的用戶密碼保存,相比md5而言更加的安全可靠,這篇文章主要介紹了Golang使用bcrypt實(shí)現(xiàn)密碼加密和校驗(yàn)的操作代碼,需要的朋友可以參考下
    2024-05-05
  • golang簡(jiǎn)單獲取上傳文件大小的實(shí)現(xiàn)代碼

    golang簡(jiǎn)單獲取上傳文件大小的實(shí)現(xiàn)代碼

    這篇文章主要介紹了golang簡(jiǎn)單獲取上傳文件大小的方法,涉及Go語(yǔ)言文件傳輸及文件屬性操作的相關(guān)技巧,需要的朋友可以參考下
    2016-07-07
  • Golang?errgroup?設(shè)計(jì)及實(shí)現(xiàn)原理解析

    Golang?errgroup?設(shè)計(jì)及實(shí)現(xiàn)原理解析

    這篇文章主要為大家介紹了Golang?errgroup?設(shè)計(jì)及實(shí)現(xiàn)原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • go-python 庫(kù)使用應(yīng)用案例

    go-python 庫(kù)使用應(yīng)用案例

    本文深入探討了如何使用Go-Python庫(kù)進(jìn)行跨語(yǔ)言編程,以及在實(shí)際應(yīng)用中的各種技巧和應(yīng)用案例,在結(jié)語(yǔ)中,我們將對(duì)Go-Python庫(kù)的使用方法與技巧進(jìn)行總結(jié),并展望Go與Python混合編程的未來(lái)發(fā)展
    2024-03-03
  • 使用client-go工具調(diào)用kubernetes API接口的教程詳解(v1.17版本)

    使用client-go工具調(diào)用kubernetes API接口的教程詳解(v1.17版本)

    這篇文章主要介紹了使用client-go工具調(diào)kubernetes API接口(v1.17版本),本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Go strconv包實(shí)現(xiàn)字符串與數(shù)值轉(zhuǎn)換的深度解析

    Go strconv包實(shí)現(xiàn)字符串與數(shù)值轉(zhuǎn)換的深度解析

    在 Go 語(yǔ)言開(kāi)發(fā)中,字符串與基本數(shù)據(jù)類型之間的轉(zhuǎn)換非常常見(jiàn),Go 標(biāo)準(zhǔn)庫(kù)中的 strconv 包正是為這些場(chǎng)景設(shè)計(jì)的,下面小編就和大家詳細(xì)介紹一下它的具體應(yīng)用吧
    2026-03-03
  • golang程序?qū)觩rometheus過(guò)程

    golang程序?qū)觩rometheus過(guò)程

    文章介紹了如何在Golang項(xiàng)目中集成Prometheus進(jìn)行監(jiān)控,包括安裝客戶端庫(kù)、定義和注冊(cè)指標(biāo)、暴露指標(biāo)端點(diǎn)、更新指標(biāo)值、配置標(biāo)簽和注冊(cè)表,以及生產(chǎn)環(huán)境的建議配置
    2025-10-10
  • Go語(yǔ)言實(shí)現(xiàn)配置熱加載的方法分享

    Go語(yǔ)言實(shí)現(xiàn)配置熱加載的方法分享

    web項(xiàng)目,經(jīng)常需要熱啟動(dòng)各種各樣的配置信息,一旦這些服務(wù)發(fā)生變更,我們需要重新啟動(dòng)web server,以使配置生效,實(shí)現(xiàn)配置熱加載,本文為大家整理了幾個(gè)方法實(shí)現(xiàn)這個(gè)需求,需要的可以參考下
    2023-05-05
  • Go實(shí)現(xiàn)分布式唯一ID的生成之雪花算法

    Go實(shí)現(xiàn)分布式唯一ID的生成之雪花算法

    本文主要介紹了Go實(shí)現(xiàn)分布式唯一ID的生成之雪花算法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Go語(yǔ)言切片擴(kuò)容原理和過(guò)程

    Go語(yǔ)言切片擴(kuò)容原理和過(guò)程

    切片(Slice)在 Go 語(yǔ)言中,有一個(gè)很常用的數(shù)據(jù)結(jié)構(gòu),切片是一個(gè)擁有相同類型元素的可變長(zhǎng)度的序列,它是基于數(shù)組類型做的一層封裝,它非常靈活,支持自動(dòng)擴(kuò)容,并發(fā)不安全,本文給大家介紹了Go 語(yǔ)言切片如何擴(kuò)容,需要的朋友可以參考下
    2025-02-02

最新評(píng)論

顺昌县| 沈丘县| 绥宁县| 原阳县| 剑阁县| 平山县| 海晏县| 莒南县| 山阴县| 科技| 沭阳县| 台东县| 榕江县| 博兴县| 昌乐县| 鄯善县| 汶上县| 五指山市| 来宾市| 柳江县| 始兴县| 武功县| 诸暨市| 大洼县| 乾安县| 山西省| 乐平市| 平潭县| 宜宾市| 内江市| 岱山县| 曲周县| 榆中县| 安岳县| 永城市| 新和县| 龙州县| 康平县| 博乐市| 金门县| 迭部县|