From b9322b4e666a40e66f68ddb27cba92794e4e3a99 Mon Sep 17 00:00:00 2001 From: "rick.chan" Date: Tue, 13 Oct 2020 14:03:14 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=20Usage=20=E6=96=B9=E6=B3=95?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: rick.chan --- .../Go/Package/Go_语言_flag_包基本使用.md | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/Software/Development/Language/Go/Package/Go_语言_flag_包基本使用.md b/Software/Development/Language/Go/Package/Go_语言_flag_包基本使用.md index ba5c36e..aef0815 100644 --- a/Software/Development/Language/Go/Package/Go_语言_flag_包基本使用.md +++ b/Software/Development/Language/Go/Package/Go_语言_flag_包基本使用.md @@ -77,7 +77,41 @@ flag.DurationVar(&delay, "d", 0, "时间间隔") Flag 解析在第一个非 flag 参数(单个”-“不是 flag 参数)之前停止,或者在终止符”–“之后停止。 -### 3.4.flag 其他函数 +### 3.4.flag.Usage + +golang 编译的二进制文件的 help 输出实质上 是调用的 flag.Usage() 方法, 而该方法是一个变量, 接受一个闭包, 源码如下: + +```go +// /src/flag/flag.go:580 +var Usage = func() { + fmt.Fprintf(CommandLine.Output(), "Usage of %s:\n", os.Args[0]) + PrintDefaults() +} +``` + +所以你可以直接覆盖掉 flag的 Usage 方法来修改, 例如这样: + +```go +package main + +import ( + "flag" + "fmt" +) + +func init(){ + flag.Usage = usage + flag.Parse() +} + +func usage(){ + fmt.Print("nginx version v1.12") +} + +func main(){} +``` + +### 3.5.flag 其他函数 ```go flag.Args() // 返回命令行参数后的其他参数,以 []string 类型