github.com/goravel/framework@v1.13.9/foundation/path.go (about) 1 package foundation 2 3 import ( 4 "log" 5 "os" 6 "path/filepath" 7 "runtime" 8 "strings" 9 ) 10 11 func getCurrentAbsolutePath() string { 12 dir := getCurrentAbsolutePathByExecutable() 13 tmpDir, _ := filepath.EvalSymlinks(os.TempDir()) 14 if strings.Contains(dir, tmpDir) { 15 return getCurrentAbsolutePathByCaller() 16 } 17 18 return dir 19 } 20 21 func getCurrentAbsolutePathByExecutable() string { 22 exePath, err := os.Executable() 23 if err != nil { 24 log.Fatal(err) 25 } 26 res, _ := filepath.EvalSymlinks(filepath.Dir(exePath)) 27 28 return res 29 } 30 31 func getCurrentAbsolutePathByCaller() string { 32 var abPath string 33 for i := 0; i < 15; i++ { 34 _, filename, _, ok := runtime.Caller(i) 35 if ok && strings.HasSuffix(filename, "main.go") { 36 abPath = filepath.Dir(filename) 37 break 38 } 39 } 40 41 return abPath 42 }