微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Go os args将“ .go”视为文件路径而不是字符串

如何解决Go os args将“ .go”视为文件路径而不是字符串

这是我基本上尝试从路径打印基准的代码。 这意味着,如果用户输入“ /some/random/path.java”,则输出将为“ path”。同样,如果用户arg为“ /another/myapp.c”,则输出将为“ myapp”。

这适用于所有内容,但输入的后缀为“ .go”时除外。我正在猜测,因为Go(或Visual Studio)实际上正在寻找带有Go扩展名的文件

代码

package main

import (
    "fmt"
    "os"
)

func main() {
    inputs := os.Args[1:]
    for _,arg := range inputs {
        fmt.Println(basename(arg))
    }
}

func basename(s string) string {
    // discard last "/" and everything before
    for i := len(s) - 1; i >= 0; i-- {
        if s[i] == '/' {
            s = s[i+1:]
            break
        }
    }
    // discard everything after "."
    for x := len(s) - 1; x >= 0; x-- {
        if s[x] == '.' {
            s = s[:x]
        }
    }

    return s
}

我如何执行它:

go run main.go "/some/path.java" - this works and the output is "path"
go run main.go "/some/path.go" - this doesn't work and I get an error that says "stat /some/path.go: no such file or directory".

这是Linux错误

解决方法

这是使用go run运行应用程序的结果。您可以将多个源文件列出到go run中(而不是一个),所有源文件都将被视为main包中的文件。

并且由于/some/path.go“合格”为.go源文件,因此它不会传递到您的应用,而是由go工具使用。

首先构建您的应用,然后运行可执行二进制文件,因此go run不会造成干扰。

还要注意,不是.go文件名的第一个参数会中断源文件列表,并且它将与所有后续参数一起传递给您的应用,即使它们是有效的.go文件名。

例如,它也会通过/some/path.go

go run main.go apple.txt /some/path.go 

将输出:

apple
path

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。