英文:
Go - Data types for validation
问题
如何为Go创建一个新的数据类型,在创建新变量(该类型的变量)时可以检查/验证其模式?
例如,要验证字符串是否有20个字符,我尝试了以下代码:
// 格式:2006-01-12T06:06:06Z
func date(str string) {
if len(str) != 20 {
fmt.Println("错误")
}
}
var Date = date()
type Account struct {
domain string
username string
created Date
}
但是它失败了,因为Date不是一个类型。
英文:
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.
答案1
得分: 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) {
// 日期格式:2006-01-12T06:06:06Z
if len(date) == 0 {
// 默认为今天
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)
}
英文:
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)
}
答案2
得分: 1
您可能需要使用标准库中的Time
类型。文档。
英文:
You probably want the Time
type from the standard library. Documentation.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论