package main import ( "fmt" "math/rand" "net" "net/http" "os" "runtime" "service/app/firenze/conf" "service/app/firenze/controller" "service/app/firenze/service" "service/library/configcenter" "service/library/httpengine" "service/library/httpserver" "service/library/logger" "strings" "time" ) func main() { defer func() { logger.Recover() }() rand.Seed(time.Now().UnixNano()) // 加载配置 // 1.默认配置 configPath := "/app/firenze/etc/firenze/firenze-prod.yaml" //configPath := "/Users/erwin/wishpalv2/service/etc/firenze/firenze-local-lwl.yaml" //if os.Getenv("PROJECT_ENV") == "production" { // configPath = consts.ProductionConfigPath //} cfg := new(conf.ConfigSt) err := configcenter.LoadConfig(configPath, cfg) if err != nil { msg := fmt.Sprintf("LoadConfig fail, path: %v, err: %v", configPath, err) PrintAndExit(msg) } // 初始化日志 logger.InitLogger(cfg.Log) // 初始化服务发现 //err = servicediscovery.Init(cfg.SD) //if err != nil { // msg := fmt.Sprintf("Init servicediscovery fail, path: %v, err: %v", configPath, err) // PrintAndExit(msg) //} // 初始化服务 service.DefaultService = service.NewService() service.DefaultService.Init(cfg) // 初始化http server ip := cfg.App.Ip port := cfg.App.Port router := httpengine.NewRouter() controller.Init(router) srv := &http.Server{ Addr: fmt.Sprintf("%s:%d", ip, port), Handler: router, } httpserver.StartFirenzeServer(srv, cfg.DefaultConfig, ip, port) } func PrintAndExit(msg string) { _, file, line, _ := runtime.Caller(1) errorMsg := fmt.Sprintf("file %s, line %d, %s\n", file, line, msg) _, _ = fmt.Fprintf(os.Stderr, errorMsg) logger.Fatal(errorMsg) time.Sleep(1) //wait logger flush //os.Exit(1) } func GetIp() string { addrs, err := net.InterfaceAddrs() if err != nil { PrintAndExit("get ip fail") return "127.0.0.1" } retIp := "" for _, address := range addrs { // 检查ip地址判断是否回环地址 if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { if ipnet.IP.To4() != nil { ip := ipnet.IP.String() if strings.HasPrefix(ip, "172.") { retIp = ip break } } } } return retIp }