【问题标题】:Command line application install using GoLang使用 GoLang 安装命令行应用程序
【发布时间】:2016-06-07 23:27:35
【问题描述】:

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

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 作为第一个命令?

【问题讨论】:

    标签: go


    【解决方案1】:

    查看go build command的文档

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

    编译单个主包时,build 会写入结果 可执行到以第一个源文件命名的输出文件('go build 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) 实际可执行文件的符号链接:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多