os.Args[0] 的获取的值的问题

jerrychen · 2015-05-11 08:25:14 · 10972 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2015-05-11 08:25:14 的主题,其中的信息可能已经有所发展或是发生改变。

默认情况下 os.Args[0]应该返回可执行文件的路径

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

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/了


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

10972 次点击  
加入收藏 微博
5 回复  |  直到 2015-05-12 05:46:22
cosiner
cosiner · #1 · 10年之前

应该是start.bat的问题,看一下它那里面怎么启动的吧

jerrychen
jerrychen · #2 · 10年之前

@cosiner 楼上正解, start.bat 11行 原来的写法start /b bin\studygolang >> log\panic.log 2>&1 & 我修改为start /b %GOBIN%\studygolang.exe >> log\panic.log 2>&1 & 就可以了。 谢谢!

polaris
polaris · #3 · 10年之前

确实。感谢反馈,已修改。

不过,我之前在windows下似乎没问题的,或者我记错了或者是现在的go版本有变动……

jerrychen
jerrychen · #4 · 10年之前

@polaris 站长细心,还没有来得及跟你报问题呢,你自己就找到这里了,赞一个!

polaris
polaris · #5 · 10年之前

:blush:

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传