2016-06-07 133 views
0

我不知道這將如何工作,但我基本上試圖編寫一個命令行應用程序,我可以運行命令和子命令。我使用這個流行的第三方庫,用於解析命令行參數:轉:命令行應用程序安裝

https://github.com/urfave/cli

我的問題是我有一個項目文件夾,我的。去的文件會生活:

MyProject 

所以即使在我main.go文件中的代碼,用他們的例子,我有:

package main 

import (
    "fmt" 
    "os" 

    "github.com/urfave/cli" 
) 

func main() { 
    app := cli.NewApp() 
    app.Name = "greet" 
    app.Usage = "fight the loneliness!" 
    app.Action = func(c *cli.Context) error { 
    fmt.Println("Hello friend!") 
    return nil 
    } 

    app.Run(os.Args) 
} 

當我運行go install

在我的$ GOPATH/bin目錄中,我實際上獲取了MyProject。然後,當我從終端運行MyProject,我得到

USAGE: 
myproject [global options] command [command options] [arguments...] 

但在現實中,我不首先需要的myproject命令。有沒有辦法通過命令行應用程序或第三方包來創建命令行應用程序,以便我可以從命令行運行greet而不是myproject作爲第一個命令?謝謝。

回答

2

檢查的go build command

go build [-o output] [-i] [build flags] [packages] 

文檔當編譯一個單一的主包裝,打造寫入導致 可執行的第一源文件的名字命名的輸出文件(「走出去 構建ed.go ('go build unix/sam'寫'sam'或'sam.exe')或源代碼 目錄。編寫Windows可執行文件時會添加'.exe' 後綴。

編譯多個包或單個非主包時,生成 會編譯包,但會丟棄生成的對象,只能提供 作爲可以構建包的檢查。

-o標誌,編譯一個包時只被允許,強制 構建寫生成的可執行文件或對象到指定的輸出 文件,而不是在最後兩個段落 描述的默認行爲。

嘗試建立像這樣go build -o greet,如果你希望它是來自世界各地的訪問,請不要忘記將生成的可執行文件添加到您的$PATH


或者,你可以1)創建一個別名;或2)符號鏈接到實際的可執行:

  1. alias greet='myproject'
  2. ln -s $GOPATH/bin/myproject greet(該鏈接將在當前目錄中創建)