当前位置: 首页 > 面试题库 >

如何使用Go的标志包打印位置参数的用法?

华季萌
2023-03-14
问题内容

有了这个简单的Go程序,它仅需要一个命令行参数,我如何对其进行改进以flag.Usage()提供有用的输出?

package main

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

func main() {
    flag.Parse()
    if len(flag.Args()) == 0 { 
        flag.Usage()
        os.Exit(1)
    }

    args := flag.Args()
    fmt.Println(args[0])
}

没有给出参数的当前输出:

$ ./args
Usage of ./args:

(即用法是空的,因为我找不到办法告诉use()函数需要哪些参数)。

我可以将flag.Usage()其删除并替换为以下内容:

fmt.Fprintln(os.Stderr, "Usage:", os.Args[0], "<argument>")

但是,如果您已经有了很好的方法,我不想重新发明轮子flag.Usage()。特别是因为它已经在处理可选参数:

$ ./args -foo
flag provided but not defined: -foo
Usage of ./args:

问题答案:

flag.Usage()只会为您提供有关已定义标志的有用信息。因此,您可以通过将参数定义为标志var foo = flag.Int(...)

另一个选择是定义您自己的用法处理程序。请参见下面的简单示例,该示例将打印自定义消息以及所有已定义标志的默认值。Usage如果flag.Parse()失败,将以这种方式打印您的自定义

package main
import (
    "flag"
    "fmt"
    "os"
)

func myUsage() {
     fmt.Printf("Usage: %s [OPTIONS] argument ...\n", os.Args[0])
     flag.PrintDefaults()
}

func main() {
     flag.Usage = myUsage
     /* ... */
}


 类似资料:
  • 问题内容: 我正在Go中运行一个带有打印内容的语句的测试(即用于测试的调试),但是它不打印任何内容。 当我对此文件运行go test时,输出为: 据我所知,真正使其打印的唯一方法是通过t.Error()进行打印,如下所示: 哪个输出: 我已经用Google搜索并浏览了手册,但没有找到任何东西。 问题答案: 结构和都具有和方法,这听起来似乎是您想要的。和分别类似于和。 在此处查看更多详细信息:htt

  • 我在Go中运行一个测试,用一个语句打印一些东西(例如,用于测试的调试),但是它没有打印任何东西。 当我对此文件运行go测试时,输出如下: 据我所知,真正让它打印出来的唯一方法是通过t.Error()打印出来,如下所示: 其输出如下: 我用谷歌搜索并查看了手册,但没有找到任何东西。

  • 问题内容: 有人知道在Go中漂亮地打印JSON输出的简单方法吗? 库存的 http://golang.org/pkg/encoding/json/ 软件包似乎不包含此功能 (编辑:确实如此,请参见接受的答案),而且快速的Google并没有发现任何明显的问题。 我正在寻找的用途既可以打印出JSON 的结果,又可以从任何地方格式化一个充满JSON的字符串,因此出于调试目的而更易于阅读。 问题答案: 通

  • 有人知道一种简单的方法可以在Go中漂亮地打印JSON输出吗? 股票 http://golang.org/pkg/encoding/json/软件包似乎不包含此功能 (编辑:是的,请参见公认的答案),快速的谷歌搜索不会发现任何明显的问题。 我正在寻找的用法都是漂亮的打印json的结果。封送,然后格式化来自任何地方的充满JSON的字符串,因此更容易出于调试目的进行读取。

  • 当我将应用程序运行到容器中时,我可以看到以下输出: Docker日志 现在,从docker实例中,我只看到“stdout”: root@3acd2bd90da4:/usr/src/app#./bin/run.sh 它错过了docker日志命令中以Traceback(stderr)开头的错误部分 当我在容器中运行命令时,我能做些什么来打印所有的日志? 谢啦

  • 问题内容: 我想打印这样的东西 图片 标题 捷普 我知道要在messageFormat标头中打印带有标题的jtable,但我不知道如何添加图像 图像是徽标 问题答案: 您可以尝试此处显示的方法。使用而不是在您的可打印物中。