Marketplace

go-cli

CLI application patterns and best practices

$ 安裝

git clone https://github.com/pluginagentmarketplace/custom-plugin-go /tmp/custom-plugin-go && cp -r /tmp/custom-plugin-go/skills/go-cli ~/.claude/skills/custom-plugin-go

// tip: Run this command in your terminal to install the skill


name: go-cli description: CLI application patterns and best practices sasmp_version: "1.3.0" bonded_agent: 06-go-cli bond_type: SECONDARY_BOND

Go CLI Skill

Supplementary CLI patterns and utilities.

Overview

Additional CLI patterns for argument parsing, progress indicators, and user interaction.

Parameters

ParameterTypeRequiredDefaultDescription
featurestringyes-Feature: "progress", "prompt", "color"

Core Topics

Argument Validation

var cmd = &cobra.Command{
    Use:   "process [file]",
    Args:  cobra.ExactArgs(1),
    RunE: func(cmd *cobra.Command, args []string) error {
        file := args[0]
        if _, err := os.Stat(file); os.IsNotExist(err) {
            return fmt.Errorf("file not found: %s", file)
        }
        return process(file)
    },
}

Progress Bar

func DownloadWithProgress(url, dest string) error {
    resp, err := http.Get(url)
    if err != nil {
        return err
    }
    defer resp.Body.Close()

    file, err := os.Create(dest)
    if err != nil {
        return err
    }
    defer file.Close()

    bar := progressbar.DefaultBytes(resp.ContentLength, "downloading")
    _, err = io.Copy(io.MultiWriter(file, bar), resp.Body)
    return err
}

Interactive Prompt

func ConfirmAction(message string) bool {
    reader := bufio.NewReader(os.Stdin)
    fmt.Printf("%s [y/N]: ", message)

    input, _ := reader.ReadString('\n')
    input = strings.TrimSpace(strings.ToLower(input))

    return input == "y" || input == "yes"
}

Colored Output

import "github.com/fatih/color"

var (
    successColor = color.New(color.FgGreen).SprintFunc()
    errorColor   = color.New(color.FgRed).SprintFunc()
    warnColor    = color.New(color.FgYellow).SprintFunc()
)

func PrintSuccess(msg string) {
    fmt.Println(successColor("✓"), msg)
}

func PrintError(msg string) {
    fmt.Fprintln(os.Stderr, errorColor("✗"), msg)
}

Troubleshooting

Failure Modes

SymptomCauseFix
Colors not showingNo TTYCheck isatty
Input hangsStdin closedHandle EOF

Usage

Skill("go-cli")