去:命令行应用安装

时间:2016-06-07 23:27:35

标签: go

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

https://github.com/urfave/cli

我的问题是我有一个项目文件夹,我的.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)
}

当我运行go install时,

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

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

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

1 个答案:

答案 0 :(得分:2)

查看go build command

的文档
go build [-o output] [-i] [build flags] [packages]
  

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

     

编译多个包或单个非主包时,构建   编译包但丢弃生成的对象,仅提供服务   检查包是否可以构建。

     

-o标志,仅在编译单个包时允许,强制执行   build用于将生成的可执行文件或对象写入命名输出   文件,而不是最后两个中描述的默认行为   段落。

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

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

  1. alias greet='myproject'
  2. ln -s $GOPATH/bin/myproject greet(链接将在当前目录中创建)