package main import ( "fmt" "net" "net/http" "os" "runtime" "service/app/levi/controller" "service/library/httpengine" "service/library/httpserver" "service/library/logger" "strings" "time" ) func main() { defer func() { logger.Recover() }() // 初始化http server ip := GetIp() port := 9900 router := httpengine.NewRouter() controller.Init(router) srv := &http.Server{ Addr: fmt.Sprintf("%s:%d", ip, port), Handler: router, } httpserver.StartLeviServer(srv, 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 }