如何在运行时获取我自己的程序名称?Go与C/C++的argv[0]有什么类似功能呢?对我来说,用正确的名称生成用法很有用.

更新:添加了一些代码.

package main

import (
    "flag"
    "fmt"
    "os"
)

func usage() {
    fmt.Fprintf(os.Stderr, "usage: myprog [inputfile]\n")
    flag.PrintDefaults()
    os.Exit(2)
}

func main() {
    flag.Usage = usage
    flag.Parse()

    args := flag.Args()
    if len(args) < 1 {
        fmt.Println("Input file is missing.");
        os.Exit(1);
    }
    fmt.Printf("opening %s\n", args[0]);
    // ...
}

推荐答案

import "os"
os.Args[0] // name of the command that it is running as
os.Args[1] // first command line parameter, ...

参数在oshttp://golang.org/pkg/os/#Variables中公开

如果要进行参数处理,flaghttp://golang.org/pkg/flag是首选方法.专门针对您的案件flag.Usage

更新您给出的示例:

func usage() {
    fmt.Fprintf(os.Stderr, "usage: %s [inputfile]\n", os.Args[0])
    flag.PrintDefaults()
    os.Exit(2)
}

应该能行得通

Go相关问答推荐

无法在Macos上使用Azure Speech golang SDK

Go Regexp:匹配完整的单词或子字符串,或者根本不匹配

将这两个函数合二为一的惯用方法

如何使用 html/template 在 golang 中运行一个范围内的范围

如何根据地址和大小打印字符串

使用goqu无法获取响应

GORM中是否可能自动迁移具有循环关系的表?

Go time.Parse 无效的 ISO 日期

在 Windows 11 上运行 go mod tidy 时的 gitlab 权限问题

Golang prometheus:有没有办法衡量出站请求的指标?

替换字符串中的最后一个字符

当客户端同时是服务器时,需要什么 mTLS 证书?

从 Makefile 运行时权限被拒绝

我相信我正确地在 sRGB 和线性 RGB 之间进行了转换,那么为什么深色的结果看起来更糟呢?

为什么 go-cmp Equal() 说 struct 不是完全相等的,即使所有字段都非常相等?

gob 解码器仅返回数组中的第一个元素

将基本 HTTP AUth 用户/密码凭据存储在 GO 中,无需外部包

如何使用 fyne 避免 GUI 应用程序中的循环依赖?

是否存在一个Go泛型类型约束,该约束捕获了将类型用作映射中的键的能力?

如何在 Prometheus 中正确检测区域和环境信息?