使用GoLang安装命令行应用程序

使用GoLang安装命令行应用程序,go,Go,我不确定这将如何工作,但我基本上是在尝试编写一个可以运行命令和子命令的命令行应用程序。我正在使用这个流行的第三方库解析命令行参数: 我的问题是我有一个项目文件夹,我的.go文件将保存在其中: MyProject 因此,即使在main.go文件中的代码中,使用它们的示例,我也有: package main import ( "fmt" "os" "github.com/urfave/cli" ) func main(

我不确定这将如何工作,但我基本上是在尝试编写一个可以运行命令和子命令的命令行应用程序。我正在使用这个流行的第三方库解析命令行参数:

我的问题是我有一个项目文件夹,我的.go文件将保存在其中:

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)
}
当我运行
去安装

在我的$GOPATH/bin目录中,我实际上构建了我的项目。然后,当我从终端运行
MyProject
时,我得到

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

但实际上,我不需要先使用
myproject
命令。是否有一种方法可以通过命令行应用程序或第三方软件包来创建命令行应用程序,以便我可以从命令行运行
greet
,而不是将
myproject
作为第一个命令?

查看文档中的

编译单个主包时,build会写入生成的 可执行到以第一个源文件命名的输出文件('go 生成ed.go rx.go'写入'ed'或'ed.exe')或源代码 目录('go build unix/sam'写入'sam'或'sam.exe')。“.exe” 在编写Windows可执行文件时添加后缀

编译多个包或单个非主包时,请生成 编译包但丢弃结果对象,仅用于 作为检查包是否可以构建

只有在编译单个包时才允许使用-o标志 build将生成的可执行文件或对象写入命名输出 文件,而不是前两部分中描述的默认行为 段落

试着像这样构建它
go build-o greet
,如果希望从任何地方都可以访问它,不要忘记将生成的可执行文件添加到
$PATH


或者,您可以仅1)创建别名;或2)符号链接到实际可执行文件:

  • alias greet='myproject'
  • ln-s$GOPATH/bin/myproject greet
    (链接将在当前目录中创建)
  • go build [-o output] [-i] [build flags] [packages]