2017-06-09 1 views
1

ゴールメッセージを隠すことはできますか?このアプリのショーは、ユーザーにゴールメッセージを隠す

package main 

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

var signal = flag.String("z", "", "") 

func main() { 

    flag.Usage = func() { 
     fmt.Printf("Usage: kata -z <command>\n\n") 
     fmt.Printf(" test\tTesting\n") 
     fmt.Printf(" version\tVersion\n") 
     fmt.Println("") 
    } 

    flag.Parse() 
    if len(os.Args) != 3 { 
     flag.Usage() 
     os.Exit(1) 
    } 

    switch *signal { 
    case "test": 
     fmt.Println("testing...") 
    case "version": 
     fmt.Println("0.0.1") 
    default: 
     fmt.Println("incorrect...") 
    } 
} 

次の情報:私はあなたの例を示して https://play.golang.org/p/oYwADdmlAJ

をしかし、私は、コマンドラインkata -flagで書く場合は、システムが返されます。flag needs an argument:またはflag provided but not defined:との情報のことを私は前にあなたを見せます。

ゴランメッセージを隠すことができるかどうか知りたいですか?

P .:質問を理解できない場合は、言い換えることができます。

+0

正確に何を隠したいですか?フラグパッケージはあなたが言うことを正確に行っています。 – JimB

+2

これは、 'flag.Parse()'の過程で出力されるエラーメッセージを参照していると思います。 – Adrian

+0

ゴランが私に返すメッセージを隠そうとしています: 'フラグには引数が必要です:'または 'フラグは提供されていますが定義されていません:'とフラグのみを表示します。使用機能 – icarbajo

答えて

3

実際flag.CommandLineと呼ばれるグローバルflag.FlagSetに通過:

flag.Parse() 
if len(os.Args) != 3 { 
    flag.Usage() 
    os.Exit(1) 
} 

。内部的には、これは出力にエラーを出力します。これはデフォルトでstderrです。あなたは、例えば、明示的にioutil.Discardこれを設定することで、メッセージを抑制することができます

flag.CommandLine.SetOutput(ioutil.Discard) 
flag.Parse() 

これはflag.Parse()によって内部ですべてのメッセージ出力を破棄します。適切なio.Writerを渡すことで、選択した他の場所にもログオンすることができます。

0

私は解決策を見つけた:

前:flagでグローバル関数を使用して

if len(os.Args) != 3 || os.Args[1] != "-z" { 
    flag.Usage() 
    os.Exit(1) 
} else { 
    flag.Parse() 
} 
+1

これは特定のエラーのケースを修正しますが、場合によっては独自のメッセージを出力することがあります。包括的な解決策については私の答えを見てください。 – Adrian