package main import ( "deeplx-local/service" "deeplx-local/web" "errors" "fmt" "github.com/gin-gonic/gin" "github.com/ycvk/endless" "log" "net" "net/http" "os" ) // getLocalIP 获取本地IP地址 func getLocalIP() string { addrs, err := net.InterfaceAddrs() if err != nil { fmt.Println(err) return "" } for _, address := range addrs { // 检查IP地址是IPv4并且不是回环地址 if ipNet, ok := address.(*net.IPNet); ok && !ipNet.IP.IsLoopback() { if ipNet.IP.To4() != nil { return ipNet.IP.String() } } } return "" } // getHostIP 获取容器所在主机的IP地址 func getHostIP() string { interfaces, err := net.Interfaces() if err != nil { log.Fatal(err) } for _, iface := range interfaces { if iface.Name == "eth0" || iface.Name == "en0" { // eth0 是容器默认网络接口 addrs, err := iface.Addrs() if err != nil { log.Fatal(err) } for _, addr := range addrs { if ipNet, ok := addr.(*net.IPNet); ok && !ipNet.IP.IsLoopback() && ipNet.IP.To4() != nil { return ipNet.IP.String() } } } } return "" } func main() { initServer() // 初始化服务 autoScan() // 自动扫描 // 获取并打印本地IP地址 localIP := getLocalIP() fmt.Printf("本地IP地址: %s\n", localIP) // 将IP地址保存到日志或环境变量中 os.Setenv("LOCAL_IP", localIP) // 获取并打印容器所在主机IP地址 hostIP := getHostIP() fmt.Printf("容器所在主机IP地址: %s\n", hostIP) // 将主机IP地址保存到环境变量中 os.Setenv("HOST_IP", hostIP) exitV1() // 监听退出 select {} } func initServer() { // 从文件中读取并处理URL urls := getValidURLs() // 注册服务 gin.SetMode(gin.ReleaseMode) r := gin.Default() balancerService := service.NewLoadBalancer(&urls) lxHandler := web.NewDeepLXHandler(balancerService) lxHandler.RegisterRoutes(r) go func() { if err := endless.ListenAndServe("0.0.0.0:62155", r); err != nil && !errors.Is(err, http.ErrServerClosed) { log.Fatal("web服务启动失败: ", err) } }() }