登录
首页 >  Golang >  Go问答

如何将日期传递给命令行?

来源:stackoverflow

时间:2024-02-12 14:39:24 173浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《如何将日期传递给命令行?》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

go 在其标志包中有一些预定义的类型。我该如何传递约会?

我模仿了 url 解析示例,但它看起来有点冗长,而且我缺少一些东西。

package main

import (
    "flag"
    "fmt"
    "time"
)

const dateLayout = "2006-01-02"

type DateValue struct {
    Date *time.Time
}

func (v DateValue) String() string {
    if v.Date != nil {
        return v.Date.Format(dateLayout)
    }
    return ""
}

func (v DateValue) Set(str string) error {
    if t, err := time.Parse(dateLayout, str); err != nil {
        return err
    } else {
        *v.Date = t
    }
    return nil
}

func main() {
    var d = &time.Time{}

    flag.Var(&DateValue{d}, "date", "Date part of ISO")
    flag.Parse([]string{"--date", "2022-08-08"})
    fmt.Printf(`{date: %q}`, d)
}

可惜,此操作因错误而失败。你可以在演示中看到它

./prog.go:35:13:调用 flag.parse 时参数过多 有([]字符串) 想 ()


正确答案


Parse 解析来自 os.args[1:] 的命令行标志,需要在定义顶级标志后调用。构建子命令,例如prog --date ,使用 flagset

您可以从方法签名中注意到,它是 not take any arguments,这就是您在参数不匹配时立即出错的原因(pkg.go.dev 是您的朋友)

使用所示代码,创建默认值 Flagset 并分配新标志和关联值

func main() {
    var d = &time.Time{}
    fs := flag.NewFlagSet("DateValue", flag.ExitOnError)
    
    fs.Var(&DateValue{d}, "date", "Date part of ISO")
    fs.Parse([]string{"--date", "2022-08-08"})

    fmt.Printf(`{date: %q}`, d)
}

go-playground

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《如何将日期传递给命令行?》文章吧,也可关注golang学习网公众号了解相关技术文章。

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