GO---コマンドソースファイル

4311 ワード

コマンドソースファイル
  • コマンドソースファイル受信パラメータ
  • コマンドソースファイルパラメータの表示方法
  • コマンドソースファイルパラメータのカスタマイズ方法
  • ソースファイルは、コマンドソースファイル、ライブラリソースファイル、テストソースファイルの3つに分けられ、それぞれ異なる用途と作成ルールがあります.コマンドソースファイルは、プログラムの実行インタフェースであり、独立して実行できるプログラムごとに所有する必要があります.コマンドソースファイルの直接親ディレクトリと同じ名前の実行可能ファイルを構築またはインストールすることで生成できます.
    ソースファイル宣言がmainパケットに属し、パラメータ宣言なしで結果宣言なしのmain関数が含まれている場合は、コマンドソースファイルです.このように:
    package main
     
    import "fmt"
     
    func main() {
    	fmt.Println("Hello, world!")
    }
    

    go runを使用してこのセグメントコードを実行すると、Hello、worldが表示されます.
    LinuxでもWindowsでも、コマンドラインを使ったことがあると、ほとんどのコマンド(command)がパラメータ(argument)を受信できることがわかります.コマンドソースファイルを構築またはインストールすることによって生成される実行可能ファイルは「コマンド」と見なすことができ、コマンドである以上、パラメータを受信する能力を備えなければならない.
    コマンドソースファイル受信パラメータ
    package main
    
    import (
    	"os"
    	"flag"
    	"fmt"
    )
    
    var name string
    
    func init() {
    	flag.StringVar(&name, "name", "everyone", "The greeting object.")
    }
    
    func main() {
    	flag.Parse()
    	fmt.Printf("Hello, %s!
    ", name) }

    実行結果
    PS D:\GO\src\commad_src_file_test>  go  run .\command_src_file.go -name xx
    Hello, xx!
    

    flagはGo言語標準ライブラリのコードパッケージで、コマンドパラメータを受信および解析するためのflag.StringVarには4つのパラメータがあり、1つ目のパラメータはコマンドパラメータ値を格納するためのアドレスであり、2つ目のパラメータはコマンドパラメータの名前であり、3つ目はパラメータのデフォルト値であり、4つ目はコマンドパラメータの説明である
    コマンドソースファイルパラメータの説明を表示する方法
    PS D:\GO\src\commad_src_file_test>  go  run .\command_src_file.go --help
    Usage of C:\Users\84030\AppData\Local\Temp\go-build412649366\b001\exe\command_src_file.exe:
      -name string
            The greeting object. (default "everyone")
    exit status 2
    

    コマンドソースファイルパラメータのカスタマイズ方法の説明
    1.flag.Usageを使用して値を再割り当てします.flag.Usageのタイプはfunc()です.つまり、パラメータ宣言がなく、結果宣言がない関数のタイプです.
    package main
    
    import (
    	"os"
    	"flag"
    	"fmt"
    )
    
    var name string
    
    func init() {
    	flag.StringVar(&name, "name", "everyone", "The greeting object.")
    }
    
    func main() {
    	flag.Usage = func() {
    		fmt.Fprintf(os.Stderr, "Usage of %s:
    ", "question") flag.PrintDefaults() } flag.Parse() fmt.Printf("Hello, %s!
    ", name) }
    PS D:\GO\src\commad_src_file_test>  go  run .\command_src_file.go --help
    Usage of question:
      -name string
            The greeting object. (default "everyone")
    exit status 2
    

    2、flag.CommandLineを使う
    package main
    
    import (
    	"os"
    	"flag"
    	"fmt"
    )
    
    var name string
    
    func init() {
    	flag.StringVar(&name, "name", "everyone", "The greeting object.")
    }
    
    func main() {
    	flag.CommandLine = flag.NewFlagSet("", flag.ExitOnError)
    	flag.CommandLine.Usage = func() {
    		fmt.Fprintf(os.Stderr, "Usage of %s:
    ", "question") flag.PrintDefaults() } flag.Parse() fmt.Printf("Hello, %s!
    ", name) }

    実行結果
    PS D:\GO\src\commad_src_file_test>  go  run .\command_src_file.go --help
    Usage of question:
    exit status 2
    

    flag.CommandLineコードを
    flag.CommandLine = flag.NewFlagSet("", flag.PanicOnError)
    

    実行結果
    PS D:\GO\src\commad_src_file_test>  go  run .\command_src_file.go --help
    Usage of question:
    panic: flag: help requested
    
    goroutine 1 [running]:
    flag.(*FlagSet).Parse(0xc0000440c0, 0xc000004430, 0x1, 0x1, 0xc0000401f0, 0xc0000440c0)
            E:/Go/src/flag/flag.go:938 +0x107
    flag.Parse()
            E:/Go/src/flag/flag.go:953 +0x76
    main.main()
            D:/GO/src/commad_src_file_test/command_src_file.go:25 +0x74
    exit status 2
    

    flag.ExitOnErrorは、コマンドパラメータコンテナに、コマンドの後に–helpまたはパラメータ設定が正しくない場合、コマンドパラメータ使用説明を印刷した後、ステータスコード2で現在のプログラムを終了することを意味します.
    ステータスコード2はユーザが誤ってコマンドを使用したことを表し、flag.PanicOnErrorとの違いは最後に「ランタイムパニック(panic)」を投げ出すことである.
    この方法を使うこともできます.もっと柔軟です.
    package main
    
    import (
    	"os"
    	"flag"
    	"fmt"
    )
    
    var name string
    var cmdLine = flag.NewFlagSet("question", flag.ExitOnError)
    
    func init() {
    	cmdLine.StringVar(&name, "name", "everyone", "The greeting object.")
    }
    
    func main() {
    	cmdLine.Parse(os.Args[1:]) //        
    	fmt.Printf("Hello, %s!
    ", name) }