2010-04-14 53 views
4

如何爲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 
} 

但由於日期是不是一個類型的失敗。

+0

爲什麼這是社區wiki? – peterSO 2010-04-14 15:13:11

回答

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) 
}