You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

命令行程序如何同时支持参数调用和管道输入两种运行模式?

实现思路

要同时兼容两种调用模式,只需要按以下优先级判断输入来源即可:

  • 优先检查命令行参数os.Args的长度:如果参数数量大于1(第一个参数是程序本身路径),说明用户是通过传参的方式调用,直接处理传入的字符串即可
  • 如果没有传入额外参数,再通过bufio.NewScanner(os.Stdin)读取标准输入内容,处理管道传入的数据
Go 实现示例代码
package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

func main() {
	// 优先处理命令行传参的情况
	if len(os.Args) > 1 {
		input := strings.Join(os.Args[1:], " ")
		fmt.Println(strings.ToUpper(input))
		return
	}

	// 没有传参则读取标准输入(管道场景)
	scanner := bufio.NewScanner(os.Stdin)
	for scanner.Scan() {
		line := scanner.Text()
		fmt.Println(strings.ToUpper(line))
	}

	if err := scanner.Err(); err != nil {
		fmt.Fprintf(os.Stderr, "读取输入失败: %v\n", err)
		os.Exit(1)
	}
}
效果验证

编译后执行两种调用方式均可正常工作:

  1. 直接传参调用
> uppercase "willy wonka"
WILLY WONKA
  1. 管道输入调用
> cat names.txt | uppercase
CHARLIE
VIOLET
MIKE

内容的提问来源于stack exchange,提问作者GreenTriangle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:06:03