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

如何在Golang中解析未知数量、名称及格式的命令行参数?

在Go中收集未知格式的命令行参数到Map

完全可以实现把这种格式不确定的命令行参数存入map,下面是具体的实现思路和代码:

核心逻辑分析

我们需要处理三种参数形式:

  • 空格分隔的键值对:--p1 v1 或 -p5 v5
  • 等号连接的键值对:--p2=v2 或 -p6=v6
  • 无值参数:-p3 或 --p4,这类参数对应的值设为空字符串

实现代码

package main

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

func main() {
	argsMap := make(map[string]string)
	args := os.Args[1:] // 跳过程序本身的名称

	for i := 0; i < len(args); i++ {
		arg := args[i]
		// 去掉参数前缀的1个或2个横杠
		key := strings.TrimLeft(arg, "-")
		if key == arg {
			// 不是以横杠开头的参数,跳过(视为前一个参数的值已处理)
			continue
		}

		// 检查是否是等号连接的键值对
		if strings.Contains(key, "=") {
			parts := strings.SplitN(key, "=", 2)
			argsMap[parts[0]] = parts[1]
			continue
		}

		// 处理空格分隔的情况或无值参数
		if i+1 < len(args) && !strings.HasPrefix(args[i+1], "-") {
			// 下一个参数不是键,作为当前键的值
			argsMap[key] = args[i+1]
			i++ // 跳过已处理的值
		} else {
			// 没有后续值,设为空字符串
			argsMap[key] = ""
		}
	}

	// 打印结果
	fmt.Printf("map%v\n", argsMap)
}

测试验证

执行命令:

go run main.go --p1 v1 --p2=v2 -p3 --p4 -p5 v5 -p6=v6

输出结果:

map[p1:v1 p2:v2 p3: p4: p5:v5 p6:v6]

和你预期的结果一致(空字符串在打印时显示为空白,本质和""等价)。

内容的提问来源于stack exchange,提问作者Phong Phạm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:40:09