相关疑难解决方法(0)

找到可执行文件的路径

我使用Go为各种平台编译一个程序,并通过调用相对路径或仅通过其名称(如果它在PATH变量中)来运行它.

是否有可能找出可执行文件的位置?

说,我的程序叫做" foo(.exe)".我可以运行./foo,foo(如果它在PATH) ../../subdir/subdir/foo.

我试过使用os.Args[0],我想我应该检查程序名称是否包含除"foo"之外的其他内容.如果是,则使用filepath.Abs,如果不是,则使用(我找不到函数名称,有一个函数可以通过PATH查看程序的位置).

path go

27
推荐指数
2
解决办法
2万
查看次数

如何可靠地让项目扎根于 go?

现在我runtime.Caller(0)结合使用path.Dirfilepath.Abs来获取当前执行文件的路径并获取相对于它的项目根目录。

所以假设我有一个这样的文件夹结构:

$GOPATH/src/example.org/myproject
$GOPATH/src/example.org/myproject/main.go
$GOPATH/src/example.org/myproject/path
$GOPATH/src/example.org/myproject/path/loader.go
Run Code Online (Sandbox Code Playgroud)

如果我想要我的项目根目录,我调用 loader.go ,它依次获取其路径,runtime.Caller(0)然后上升一个文件夹以到达项目根目录。

问题是当使用go test -cover执行的文件不再在其正常位置时,而是在用于测试和覆盖率分析的特殊子目录中。
runtime.Caller(0)给我以下内容:

example.org/myproject/path/_test/_obj_/loader.go
Run Code Online (Sandbox Code Playgroud)

运行它path.Dirfilepath.Abs会给我:

$GOPATH/src/example.org/myproject/path/example.org/myproject/path/_test/_obj_
Run Code Online (Sandbox Code Playgroud)

当我从那里上去时,我不会到达项目根目录,但显然完全不同。所以我的问题
是:有没有可靠的方法来获得项目根?

testing go

6
推荐指数
1
解决办法
7166
查看次数

在 macOS 上查找进程的绝对路径名

我是 GO 和 mac 的新手,我正在尝试使用 sysctl 来查找正在运行的进程的完整路径名。

kprocs, err := unix.SysctlKinfoProcSlice("kern.proc.all")
    if err != nil {
        fmt.Println("error: ", err)
    }

    for _, proc := range kprocs {
        name := string(proc.Proc.P_comm[:])
        pid := proc.Proc.P_pid
        extName, err := unix.SysctlKinfoProc("kern.proc.pathname", int(pid))
        if err != nil {
            fmt.Println("error: ", err)
        }
Run Code Online (Sandbox Code Playgroud)

并收到错误:没有这样的文件或目录

我正确使用这个功能吗?

编辑 如果我像这样运行进程: ./processName ,那么我没有得到它的完整路径,例如 /Users/username/go/src/processName - 这就是我需要的。所有的解决方案ps都会给出相对路径,而我需要一些给出过程的绝对路径的东西。

macos go

6
推荐指数
1
解决办法
324
查看次数

如何使用相对目录测试Go程序?

来自测试文档:

“该包构建在临时目录中,因此不会干扰非测试安装。”

因此,任何使用与可执行文件相关的目录的代码都不会相对于 Temp\go-build......

换句话说,考虑到以下情况:

.\helloplanet.go

.\行星\planetary.res

.\helloplanet_test.go

go test
Run Code Online (Sandbox Code Playgroud)

在 Temp\go-build... 中生成一个 exe 文件,但它不会在那里重新创建一个planets\ 子目录,因此 helloplanet.exe 中寻找planets\planetary.res 的任何代码当然不会找到它。

应该如何处理这个问题呢?

testing go

5
推荐指数
2
解决办法
9115
查看次数

从Go更改父shell目录

我怎么能写一个像'cd'那样的Go程序呢?

我试过运行一个命令,但它没有用.

func main() {
    cmd := exec.Command("cd", "/media/")
    err := cmd.Run()
    log.Printf("Command finished with error: %v", err)
}
Run Code Online (Sandbox Code Playgroud)

go

0
推荐指数
1
解决办法
199
查看次数

标签 统计

go ×5

testing ×2

macos ×1

path ×1