默认情况下
os.Args[0]应该返回可执行文件的路径
``` go
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println("test the os package")
fmt.Println("Args len", len(os.Args))
for i, arg := range os.Args {
fmt.Println("arg", i)
fmt.Println("arg", arg)
}
fileInfo, err := os.Stat("E:\\go\\bin\\studygolang.exe")
if err != nil {
fmt.Println(err)
}
Date := fileInfo.ModTime().String()
fmt.Println("Date", Date)
}
输出
[ `go run testospackage.go` | done: 547.0313ms ]
test the os package
Args len 1
arg 0
arg C:\Users\ADMINI~1\AppData\Local\Temp\go-build951095955\command-line-arguments\_obj\exe\testospackage.exe
Date 2015-05-11 16:08:36.641569 +0800 CST
```
但是问题是我下载本站的代码,执行start.bat 后,总是提示
``` go panic: GetFileAttributesEx E:\go\bin\studygolang: The system cannot find the file specified. ```
代码定位到version.go
```go
if Date == "" {
fileInfo, err := os.Stat(os.Args[0])
if err != nil {
panic(err)
}
Date = fileInfo.ModTime().String()
}
```
从os.Arg[0] 获取的是E:\go\bin\studygolang ;而不是E:\go\bin\studygolang.exe
请问是什么原因导致的,没有后缀名了
PS:自己手动修改fileInfo, err := os.Stat(os.Args[0] +".exe"),
然后再执行install.bat ,start.bat 就没有错误,可以http://127.0.0.1:8080/了
更多评论
<a href="/user/cosiner" title="@cosiner">@cosiner</a> 楼上正解,
start.bat 11行 原来的写法start /b bin\studygolang >> log\panic.log 2>&1 &
我修改为start /b %GOBIN%\studygolang.exe >> log\panic.log 2>&1 & 就可以了。
谢谢!
#2