gin项目获取IP的地理位置信息

 来源:http://www.shanhubei.com/archives/2572.html

github:GitHub - shanhubei/tools_go: 干净的gin项目,获取ip的地理位置

gitee: tools_go: 干净的gin项目,获取ip的地理位置

关于

是基于 Gin 进行模块化设计的 API工具,引入Gin最少化的配置。

Gin 是一个用 Go (Golang) 编写的 Web 框架,小巧、性能优越。

主要为了 学习和测试用。

示例:

1、获取ip的地理位置信息

http://xxxx.xxxx.xxxx/tools/get_geoip

无参数是获取请求端IP的位置信息

使用&安装

1、git clone 地址

2、需要下载geoip数据库

MaxMind Server IP Addresses | MaxMind Developer Portal

修改位置在代码: geoip2.Open

3、go run main.go

4、交叉编译到服务器docker

4.1、Window下编译可执行程序

GOARCH:编译目标平台的硬件体系架构(amd64, 386, arm, ppc64等)。

GOOS:编译目标平台上的操作系统(darwin, freebsd, linux, windows)。

CGO_ENABLED:代表是否开启CGO,1表示开启,0表示禁用。由于CGO不能支持交叉编译,所以需要禁用。

#Mac
SET CGO_ENABLED=0 
SET GOOS=darwin 
SET GOARCH=amd64 
go build main.go
#Linux
SET CGO_ENABLED=0 
SET GOOS=linux 
SET GOARCH=amd64 
go build main.go

4.2、生成docker的相关命令

构建最小镜像:由于官方的golang镜像太大了,720多M,所以为了最小化我们的应用,我们采取了alpine镜像,大小连4MB都不到。

#编写Dockerfile
DockerFile如下:
​
FROM alpine
MAINTAINER  Aze
WORKDIR /go/src/
COPY . .
EXPOSE 8777
ENTRYPOINT ["./app/main"]
​
#构建镜像
docker build -t goenv:v1 .
​
#运行程序
docker run --name golanggeoip -v /mydata/data/geoip:/go/src -p 8608:9090 -it --privileged -u root  --entrypoint /bin/sh goenv:v1
#进入容器
./main &

4.3、配置nginx反代理和proxy_pass转发。 就可以愉快的使用了

搭建过程

1、初始化项目,切换到项目根目录

# 1 go mod init "tools_go"   # tools_go项目名称
# 创建main.go文件
​
# 2 进入tools_go/router目录,初始化模块
go mod init router
# 下载依赖包,router需要gin依赖
go get -u github.com/gin-gonic/gin
​
# 3 进入tools_go/service目录,初始化模块
go mod init service
​
# 4 初始化工作区
go work init ./router ./service

ps:

如果下载超时,换成国内可访问的地址,设置GOPROXY代理:

go env -w GOPROXY=https://goproxy.cn,direct

go env -w GOSUMDB=off (关闭包的有效性验证)

go env -w GOSUMDB=“sum.golang.google.cn” (也可设置国内提供的sum 验证服务)

2、编写相关的业务代码

todo

补充

go.work 文件中总共支持三个指令。

  • go:声明 go 版本号,主要用于后续新语义的版本控制。

  • use:声明应用程序所依赖的模块的特定文件路径。该路径可以是绝对的或相对的,并且可以在应用程序的命运目录之外。

  • replace:声明模块依赖的导入路径被替换,优先于 go.mod 中的 replace 指令。

附录

1、可以在MaxMind Server IP Addresses | MaxMind Developer Portal 上注册账号 申请key 自动更新,是免费的。

通过注册引导页面,点击“Generate a License Key”

GitHub - maxmind/geoipupdate: GeoIP update client code 这里有详细的安安装及配置说明

运行geoipupdate命令并加入定时任务

2、python代码:

安装:

pip install geoip2

vim web.py

from flask import Flask import geoip2.database

app = Flask(name) reader=geoip2.database.Reader('/home/geoipupdate_4.8.0_linux_amd64/GeoLite2-City.mmdb') @app.route("/") def index():

ip_addr = request.remote_addr

return "Hello World!"

@app.route("/getip/<ip>") def getip(ip): ipinfo=reader.city(ip) ipinfo_json={'country':ipinfo.country.name,'city':ipinfo.city.name,'location':[ipinfo.location.longitude,ipinfo.location.latitude]} return ipinfo_json

if name == "main": app.run(host='0.0.0.0',port=8090)

访问链接 http://192.168.1.166:8090/getip/113.97.30.189

参考

1、Gin Web Framework

2、 GitHub - gin-gonic/gin: Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much better performance -- up to 40 times faster. If you need smashing performance, get yourself some Gin.

3、MaxMind · GitHub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值