如何创建从匹配模式的字符串派生的Go类型?
我正在尝试创建一个新的Go类型,它基于如何创建从匹配模式的字符串派生的Go类型?,go,types,Go,Types,我正在尝试创建一个新的Go类型,它基于字符串,但需要匹配一个模式(Slack username,例如@ben) 使用时,类型将类似于: var user SlackUser user = SlackUser("@ben") fmt.Println(user) //This should print: @ben 如果它与模式匹配,newslakuser将起作用。如果没有,它将抛出一个错误 要匹配的模式基于以下内容: ^@[a-z0-9][a-z0-9.-]*$ (我是新手,因此非常感谢对我方法
字符串
,但需要匹配一个模式(Slack username,例如@ben
)
使用时,类型将类似于:
var user SlackUser
user = SlackUser("@ben")
fmt.Println(user) //This should print: @ben
如果它与模式匹配,newslakuser
将起作用。如果没有,它将抛出一个错误
要匹配的模式基于以下内容:
^@[a-z0-9][a-z0-9.-]*$
(我是新手,因此非常感谢对我方法的任何更正)使用结构类型:
type SlackUser struct {
username string
}
编译正则表达式:
var (
pattern = regexp.MustCompile("^@[a-z0-9][a-z0-9._-]*$")
)
建造商:
func NewSlackUser(username string) (*SlackUser, error) {
if !pattern.MatchString(username) {
return nil, errors.New("Invalid username.")
}
return &SlackUser{ username }, nil
}
纵梁:
func (s *SlackUser) String() string {
return s.username
}
完整使用结构类型:
type SlackUser struct {
username string
}
编译正则表达式:
var (
pattern = regexp.MustCompile("^@[a-z0-9][a-z0-9._-]*$")
)
建造商:
func NewSlackUser(username string) (*SlackUser, error) {
if !pattern.MatchString(username) {
return nil, errors.New("Invalid username.")
}
return &SlackUser{ username }, nil
}
纵梁:
func (s *SlackUser) String() string {
return s.username
}
完整的请参见