gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:33:26 32 4
gpt4 key购买 nike

这是我基本上试图从路径打印基准的代码。
这意味着,如果用户输入“/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

关于go - Go os args将“.go”视为文件路径而不是字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63970069/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com