简体   繁体   中英

Go - Data types for validation

How to create a new data type for Go which to can check/validate its schema when is created a new variable (of that type)?

By example, to validate if a string has 20 characters, I tried:

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

but it fails because Date is not a type.

In your example, you defined Date as a variable and then tried to use it as a type.

My guess is that you want to do something like this.

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

You probably want the Time type from the standard library. Documentation .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM