登录
首页 >  Golang >  Go问答

解析多值 go 标志

来源:stackoverflow

时间:2024-02-22 15:54:24 205浏览 收藏

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《解析多值 go 标志》,聊聊,我们一起来看看吧!

问题内容

我有以下代码,我需要获取 val1val2arg1arg2 等值并打印它,我尝试了很多方法,可能吗?

package main

import (
    "flag"
    "fmt"
    "strings"
)

func main() {
    args := strings.Fields("-loc .env -names val1 val2 -tags arg1 arg2")



    FlagSet := flag.NewFlagSet("FlagSet", flag.ContinueOnError)
    loc := FlagSet.String("loc", "", "")
    name := FlagSet.String("names", "", "")
    tags := FlagSet.String("tags", "", "")
    

    FlagSet.Parse(args)

    fmt.Printf("location: %s \n", *loc)
    fmt.Printf("name: %s \n", *name)
    fmt.Printf("tags: %s \n", *tags)
}

https://play.golang.org/p/8an5-0ez2ot


解决方案


您想要的不是 stdlib 标志包如何解析标志:https://golang.org/pkg/flag/#hdr-Command_line_flag_syntax。标志可以有一个参数。

您能做的最好的事情是 -loc .env -names "val1 val2" -tags "arg1 arg2"-loc .env -names val1,val2 -tags arg1,arg2。在第一种情况下,双引号将多个单词转换为单个命令行参数,在第二种情况下,使用逗号而不是空格来组合参数。在这两种情况下,您都必须将结果解析为单独的参数,可能使用 strings.split

请注意,您使用 strings.fields 将测试参数分解为空格分隔的字段,但这会忽略引号,这与命令行的行为不同。

作为 shell 使用 space(" ") 作为分隔符,使用空格作为分隔符并不是一个好主意。使用逗号“,”作为分隔符可以优雅地解决这个问题。

https://play.golang.org/p/xF2N_qnRlwe

package main

import (
    "flag"
    "fmt"
    "strings"
)

func main() {
    //NOT GOOD - multiple values (see value1 value2)
    args := strings.Fields(`-loc .env -names val1,val2 -tags arg1,arg2`)

    FlagSet := flag.NewFlagSet("FlagSet", flag.ContinueOnError)
    loc := FlagSet.String("loc", "", "")
    names := FlagSet.String("names", "", "")
    tags := FlagSet.String("tags", "", "")

    FlagSet.Parse(args)

    fmt.Printf("location: %s \n", *loc)
    fmt.Printf("names: %s \n", strings.Split(*names, ","))
    fmt.Printf("tags: %s \n", strings.Split(*tags, ","))
}

以上就是《解析多值 go 标志》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>