1 Star 0 Fork 0

bolo-tourism/go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
cmd.go 3.27 KB
一键复制 编辑 原始数据 按行查看 历史
kevin 提交于 2023-05-08 14:34 +08:00 . 初始化
// Copyright 2020 Lingfei Kong <colin404@foxmail.com>. All rights reserved.
// Use of this source code is governed by a MIT style
// license that can be found in the LICENSE file.
package app
import (
"fmt"
"os"
"runtime"
"strings"
"github.com/fatih/color"
"github.com/spf13/cobra"
)
// Command is a sub command structure of a cli application.
// It is recommended that a command be created with the app.NewCommand()
// function.
type Command struct {
usage string
desc string
options CliOptions
commands []*Command
runFunc RunCommandFunc
}
// CommandOption defines optional parameters for initializing the command
// structure.
type CommandOption func(*Command)
// WithCommandOptions to open the application's function to read from the
// command line.
func WithCommandOptions(opt CliOptions) CommandOption {
return func(c *Command) {
c.options = opt
}
}
// RunCommandFunc defines the application's command startup callback function.
type RunCommandFunc func(args []string) error
// WithCommandRunFunc is used to set the application's command startup callback
// function option.
func WithCommandRunFunc(run RunCommandFunc) CommandOption {
return func(c *Command) {
c.runFunc = run
}
}
// NewCommand creates a new sub command instance based on the given command name
// and other options.
func NewCommand(usage string, desc string, opts ...CommandOption) *Command {
c := &Command{
usage: usage,
desc: desc,
}
for _, o := range opts {
o(c)
}
return c
}
// AddCommand adds sub command to the current command.
func (c *Command) AddCommand(cmd *Command) {
c.commands = append(c.commands, cmd)
}
// AddCommands adds multiple sub commands to the current command.
func (c *Command) AddCommands(cmds ...*Command) {
c.commands = append(c.commands, cmds...)
}
func (c *Command) cobraCommand() *cobra.Command {
cmd := &cobra.Command{
Use: c.usage,
Short: c.desc,
}
cmd.SetOutput(os.Stdout)
cmd.Flags().SortFlags = false
if len(c.commands) > 0 {
for _, command := range c.commands {
cmd.AddCommand(command.cobraCommand())
}
}
if c.runFunc != nil {
cmd.Run = c.runCommand
}
if c.options != nil {
for _, f := range c.options.Flags().FlagSets {
cmd.Flags().AddFlagSet(f)
}
// c.options.AddFlags(cmd.Flags())
}
addHelpCommandFlag(c.usage, cmd.Flags())
return cmd
}
func (c *Command) runCommand(cmd *cobra.Command, args []string) {
if c.runFunc != nil {
if err := c.runFunc(args); err != nil {
fmt.Printf("%v %v\n", color.RedString("Error:"), err)
os.Exit(1)
}
}
}
// AddCommand adds sub command to the application.
func (a *App) AddCommand(cmd *Command) {
a.commands = append(a.commands, cmd)
}
// AddCommands adds multiple sub commands to the application.
func (a *App) AddCommands(cmds ...*Command) {
a.commands = append(a.commands, cmds...)
}
// FormatBaseName is formatted as an executable file name under different
// operating systems according to the given name.
func FormatBaseName(basename string) string {
// Make case-insensitive and strip executable suffix if present
if runtime.GOOS == "windows" {
basename = strings.ToLower(basename)
basename = strings.TrimSuffix(basename, ".exe")
}
return basename
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/bolo-tourism/go.git
git@gitee.com:bolo-tourism/go.git
bolo-tourism
go
go
772bc38bfa1d

搜索帮助