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  }