GO OS考虑“。”围棋;作为文件路径而不是字符串
下面是我试图从路径打印base的代码。 也就是说,如果用户输入“/some/random/path.java”,则输出将是“path”。同样,如果用户arg为“/other/myapp.c”,则输出为“myapp” 这适用于除输入后缀为“.go”之外的所有情况。我猜这是行不通的,因为Go(或visualstudio)实际上正在寻找一个具有Go扩展名的文件 代码 我是如何执行它的:GO OS考虑“。”围棋;作为文件路径而不是字符串,go,Go,下面是我试图从路径打印base的代码。 也就是说,如果用户输入“/some/random/path.java”,则输出将是“path”。同样,如果用户arg为“/other/myapp.c”,则输出为“myapp” 这适用于除输入后缀为“.go”之外的所有情况。我猜这是行不通的,因为Go(或visualstudio)实际上正在寻找一个具有Go扩展名的文件 代码 我是如何执行它的: go run main.go "/some/path.java" - this works an
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
运行应用程序的结果。您可以列出多个要运行的源文件(不仅仅是一个源文件),所有源文件都将被视为main
包的文件
由于/some/path.go
“符合”成为.go
源文件的条件,因此它不会传递到您的应用程序,而是由go
工具使用
首先构建应用程序,然后运行可执行二进制文件,这样go-run
就不会产生干扰
还要注意的是,第一个参数不是.go
文件名,它会破坏源文件列表,并且它和所有后续参数都会传递给您的应用程序,即使它们是有效的.go
文件名
例如,这将通过/some/path.go
:
go run main.go apple.txt /some/path.go
并将输出:
apple
path
这回答了你的问题吗?这里有一个关于标准术语的词:“basename”是一个文件名。“dirname”是路径,而不是文件。两者都不是指没有“扩展名”的文件名。请注意,unix中的文件扩展名实际上只是文件名的一部分,恰好遵循
和标准。因此,将“路径”称为“path.go”的“base”是一个非常糟糕的术语选择imho@DanielFarrell理解并同意。感谢您指出这一点。此外,除非您是为了练习而这样做,否则请看一下。我本来打算建议--
,但从我所知,它实际上并没有被解读为分隔符,而是被转运行
。它只是作为参数传递给main.go。基本上,除了.go
文件以外的任何文件都是作为参数传递的-包括--
,但也包括-b
或-j
,甚至只是“
带引号的空字符串,以防止shell将其解释出来谢谢你@icza并感谢所有其他人。这里的问题是他建议的,程序需要先编译。
apple
path