ZBLOG

golang args内置验证器与自定义验证

在golang中,我们可以使用flag包内置的验证器来验证命令行参数。此外,我们还可以自定义验证函数来进行更复杂的参数检查。

以下是一个示例代码,演示如何使用内置验证器和自定义验证函数:

  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "strconv"
  6. )
  7. func main() {
  8. var age int
  9. flag.IntVar(&age, "age", 0, "your age")
  10. flag.Parse()
  11. if age < 18 {
  12. fmt.Println("You must be at least 18 years old.")
  13. return
  14. }
  15. if age > 120 {
  16. fmt.Println("Are you sure you're that old?")
  17. return
  18. }
  19. fmt.Printf("You are %d years old.\n", age)
  20. }
  21. func validateRange(min, max int) func(string) error {
  22. return func(val string) error {
  23. n, err := strconv.Atoi(val)
  24. if err != nil {
  25. return fmt.Errorf("%s is not a valid number", val)
  26. }
  27. if n < min || n > max {
  28. return fmt.Errorf("%d is out of range (%d-%d)", n, min, max)
  29. }
  30. return nil
  31. }
  32. }

在上面的代码中,我们首先定义了一个整型变量age并绑定到了命令行参数-age。然后调用了.Parse()方法解析命令行参数。

接着,在主函数中添加了两个简单的检查:如果年龄小于18岁,则输出一条错误信息;如果年龄大于120岁,则输出另一条错误信息。这两个检查都是使用if语句实现的,非常简单。

然后我们定义了一个名为validateRange的函数,该函数接收两个整数作为参数,并返回一个新的验证函数。这个新函数会在给定范围之外时返回一个错误信息。

最后,在主函数中添加了一些自定义验证逻辑。我们将一个验证器传递给.Var()方法来将其应用到命令行参数上。例如:

  1. var age int
  2. flag.Var(validateRange(18, 120), "age", "your age")

这里我们使用了.Var()方法而不是.IntVar()方法,因为我们需要自定义验证功能。同时我们也注意到,当传入的值无法转化为数字时会返回错误信息。

需要注意的是,在内置验证器和自定义验证器中都可以通过返回错误信息来表示检查失败。如果命令行参数不符合预期,则应输出错误信息并退出程序。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=6586

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?