From e673885c64d5645c2c38e10ddfd922657afdc4cb Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期五, 08 十二月 2023 11:31:03 +0800
Subject: [PATCH] 使用ip初始化雪花算法
---
pkg/snowflake/snowflake.go | 50 ++++++++++++++++++++++++++++++++++++++------------
1 files changed, 38 insertions(+), 12 deletions(-)
diff --git a/pkg/snowflake/snowflake.go b/pkg/snowflake/snowflake.go
index 52420db..049b307 100644
--- a/pkg/snowflake/snowflake.go
+++ b/pkg/snowflake/snowflake.go
@@ -23,21 +23,47 @@
func InitWithIP() {
// 浣跨敤 LookupIP 鑾峰彇涓绘満鐨� IP 鍦板潃鍒楄〃
- addrs, err := net.LookupIP("localhost")
+ // 鑾峰彇鏈満鎵�鏈夌綉缁滄帴鍙�
+ interfaces, err := net.Interfaces()
if err != nil {
- logx.Errorf("snowflake can not generate, init error, get ip error:%v", err)
- panic(fmt.Sprintf("snowflake can not generate, init error, get ip error:%v", err))
- }
- var ip string
- // 閬嶅巻 IP 鍦板潃鍒楄〃
- for _, addr := range addrs {
- // 鍒ゆ柇 IP 鍦板潃鐨勭増鏈槸 IPv4 杩樻槸 IPv6
- if ipNet := addr.To4(); ipNet != nil {
- ip = ipNet.String()
- logx.Errorf("IPv4 Address: %s\n", ipNet.String())
- }
+ logx.Errorf("snowflake InitWithIP error:%v", err)
+ return
}
+ var ip string
+ // 閬嶅巻鎵�鏈夌綉缁滄帴鍙�
+ for _, iface := range interfaces {
+ // 鎺掗櫎涓�浜涚壒娈婄殑鎺ュ彛锛屼緥濡� loopback 鎺ュ彛
+ if iface.Flags&net.FlagUp != 0 && iface.Flags&net.FlagLoopback == 0 {
+ // 鑾峰彇鎺ュ彛鐨勬墍鏈夊湴鍧�
+ addrs, err := iface.Addrs()
+ if err != nil {
+ logx.Errorf("snowflake InitWithIP error:%v", err)
+ continue
+ }
+ // 閬嶅巻鎺ュ彛鐨勬墍鏈夊湴鍧�
+ for _, addr := range addrs {
+ // 妫�鏌ュ湴鍧�绫诲瀷鏄惁鏄� IP 鍦板潃
+ if ipNet, ok := addr.(*net.IPNet); ok && !ipNet.IP.IsLoopback() {
+ // 鍒ゆ柇 IP 鍦板潃鐨勭増鏈槸 IPv4 杩樻槸 IPv6
+ if ipNet.IP.To4() != nil {
+ fmt.Printf("IPv4 Address: %s\n", ipNet.IP.String())
+ if ipNet.IP.String() != "127.0.0.1" {
+ ip = ipNet.IP.String()
+ goto getIpOK
+ }
+ } else {
+ fmt.Printf("IPv6 Address: %s\n", ipNet.IP.String())
+ }
+ }
+ }
+ }
+ }
+getIpOK:
+ if ip == "" {
+ logx.Errorf("snowflake InitWithIP can not find Ip")
+ return
+ }
ipNumber, err := ipToNumber(ip)
if err != nil {
logx.Errorf("snowflake can not generate, init error, ip to number error :%v", err)
--
Gitblit v1.8.0