如何解决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 举报,一经查实,本站将立刻删除。