2010-04-14 6 views
4

Comment créer un nouveau type de données pour Go qui peut vérifier/valider son schéma quand est créée une nouvelle variable (de ce type)?Go - Types de données pour la validation

Par exemple, pour valider si une chaîne a 20 caractères, j'ai essayé:

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

mais il échoue parce que la date est pas un type.

+0

Pourquoi est-ce un wiki communautaire? – peterSO

Répondre

3

Dans votre exemple, vous avez défini Date en tant que variable, puis essayé de l'utiliser en tant que type. Je pense que vous voulez faire quelque chose comme ça.

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

Vous voulez probablement le type Time de la bibliothèque standard. Documentation.