如何为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不是一个类型。
答案 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