如何在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
相关产品推荐
相关产品推荐

