首页 > 其他分享 >golang使用geoip2获取ip归属地

golang使用geoip2获取ip归属地

时间:2024-06-03 16:10:48浏览次数:19  
标签:golang name err ip fmt geoip2 record Printf

go get github.com/oschwald/geoip2-golang

下载GeoIP2-City.mmdb

https://dev.maxmind.com/geoip/geolite2-free-geolocation-data

main.go

package main

import (
	"fmt"
	"log"
	"net"

	"github.com/oschwald/geoip2-golang"
)

func main() {
	db, err := geoip2.Open("GeoIP2-City.mmdb")
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()
	// If you are using strings that may be invalid, check that ip is not nil
	ip := net.ParseIP("81.2.69.142")
	record, err := db.City(ip)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Portuguese (BR) city name: %v\n", record.City.Names["pt-BR"])
	if len(record.Subdivisions) > 0 {
		fmt.Printf("English subdivision name: %v\n", record.Subdivisions[0].Names["en"])
	}
	fmt.Printf("Russian country name: %v\n", record.Country.Names["ru"])
	fmt.Printf("ISO country code: %v\n", record.Country.IsoCode)
	fmt.Printf("Time zone: %v\n", record.Location.TimeZone)
	fmt.Printf("Coordinates: %v, %v\n", record.Location.Latitude, record.Location.Longitude)
	// Output:
	// Portuguese (BR) city name: Londres
	// English subdivision name: England
	// Russian country name: Великобритания
	// ISO country code: GB
	// Time zone: Europe/London
	// Coordinates: 51.5142, -0.0931
}

标签:golang,name,err,ip,fmt,geoip2,record,Printf
From: https://www.cnblogs.com/qcy-blog/p/18229094

相关文章

  • DevOps生命周期的8个阶段和DevOps pipeline 详解
    您可能也在探索DevOpspipeline或工作流的概念,这些术语可能会根据不同的解释者而有所交替使用。尽管如此,DevOps生命周期和DevOpspipeline这两个术语更常被提及。本文将首先阐述DevOps生命周期的概念,然后深入介绍DevOpspipeline。DevOps生命周期和DevOpspipeline的概述DevOps......
  • TypeScript与JavaScript之间的关系
    TypeScript是一种JavaScript的超集语言,这意味着任何有效的JavaScript代码在TypeScript中都是合法的。TypeScript的设计并不意图打破或改变JavaScript的语法,因此您可以将现有的JavaScript代码直接放入TypeScript文件中,无需担心代码的结构或格式。然而,TypeScript不仅仅是JavaScrip......
  • ip地址快速切换软件有哪些好处
    ip地址快速切换软件有哪些好处?IP地址快速切换软件具有诸多显著的好处,以下是对其主要优势的详细阐述:首先,IP地址快速切换软件极大地提升了网络活动的灵活性和便捷性。对于需要经常切换网络环境或进行多账号管理的用户而言,这类软件无疑是一个强大的助手。无论是出于工作需要还是......
  • Vue3.0+typescript+Vite+Pinia+Element-plus搭建vue3框架!
    使用Vite快速搭建脚手架命令行选项直接指定项目名称和想要使用的模板,Vite+Vue项目,运行(推荐使用yarn)#npm6.xnpminitvite@latestmy-vue-app--templatevue#npm7+,需要额外的双横线:npminitvite@latestmy-vue-app----templatevue#yarnyarncreatevite......
  • 无需公网IP、无需云服务器,实现远程直连NAS该怎么做?
    手机图片、视频太多,存储空间不够用怎么办?出门在外无法直连家中NAS,远程访问NAS速度慢?自建私有云、多媒体服务器,如何多人远程共享媒体资源?可以归纳为以下几种主要方案:1、使用内网穿透工具:内网穿透的原理是依靠一台具有公网IP的服务器作为请求的中转站,从而从公网访问内网主机......
  • IP地址SSL证书申请流程与注意事项
    申请IP地址SSL证书的过程相对直接,但涉及几个关键步骤和注意事项。以下是基于现有信息整理的申请流程及注意事项概览:一、IP地址SSL证书申请流程:PC点此申请:IPSSL证书申请-极速签发注册填写注册码230918(填写注册码获得免费技术支持)1、选择合适的SSL证书类型:对于IP地址,通常......
  • JavaScript第三讲:解锁JavaScript的数据世界:基本数据类型与类型转换的奥秘
    前言:hello,大家好,在JavaScript的编程世界中,数据是构成一切的基础。无论是构建复杂的Web应用,还是处理用户输入,我们都无法绕开数据这一核心元素。而在JavaScript中,数据以不同的形式存在,我们称之为数据类型。理解这些数据类型以及它们之间的转换关系,对于编写高效、健壮的代码至关......
  • 打卡信奥刷题(40)用Scratch图形化工具信奥B3828 [NOIP2008 普及组] [NICA #2] 优秀正整
    [NICA#2]优秀正整数题目描述Aya定义符合如下条件的正整数xxx为优秀正整数:x......
  • 2005NOIP普及组真题 4. 循环
    线上OJ:【05NOIP普及组】循环核心思想:高精度1、本题用到了标准的高精度乘法模板voidinit(inta[])//传入一个数组{strings;cin>>s;//读入字符串sa[0]=s.length();//用a[0]计算字符串s的位数for(i=1;i<=a[0];i++)a[i]=s[......
  • TP-link企业路由器IPv6上网配置
    背景介绍目前国内的网络正在快速的向IPv6升级中,从网络基础设施如运营商骨干网、城域网,到互联网服务商如各类云服务,以及各类终端设备厂商如手机、电脑、路由器、交换机等。目前运营商提供的IPv6线路主要分为支持前缀授权和不支持前缀授权两种,本文主要介绍不同企业级路由器关于IPv6......