Go - 用于验证的数据类型

时间:2010-04-14 10:12:53

标签: validation go

如何为Go创建一个新的数据类型,可以在创建新变量(该类型)时检查/验证其模式?

例如,要验证字符串是否包含20个字符,我尝试了:

// Format: 2006-01-12T06:06:06Z
func date(str string) {
  if len(str) != 20 {
    fmt.Println("error")
  }
}
var Date = date()

type Account struct {
  domain  string
  username string
  created  Date
}

但它失败了,因为Date不是一个类型。

2 个答案:

答案 0 :(得分:3)

在您的示例中,您将Date定义为变量,然后尝试将其用作类型。

我的猜测是你想做这样的事情。

package main

import (
    "fmt"
    "os"
    "time"
)

type Date int64

type Account struct {
    domain   string
    username string
    created  Date
}

func NewDate(date string) (Date, os.Error) {
    // date format: 2006-01-12T06:06:06Z
    if len(date) == 0 {
        // default to today
        today := time.UTC()
        date = today.Format(time.ISO8601)
    }
    t, err := time.Parse(time.ISO8601, date)
    if err != nil {
        return 0, err
    }
    return Date(t.Seconds()), err
}

func (date Date) String() string {
    t := time.SecondsToUTC(int64(date))
    return t.Format(time.ISO8601)
}

func main() {
    var account Account
    date := "2006-01-12T06:06:06Z"
    created, err := NewDate(date)
    if err == nil {
        account.created = created
    } else {
        fmt.Println(err.String())
    }
    fmt.Println(account.created)
}

答案 1 :(得分:1)

您可能需要标准库中的Time类型。 Documentation