我正在尝试创建一个基于string
的新Go类型,但需要匹配模式(Slack用户名,例如@ben
)。
使用时,类型如下:
var user SlackUser
user = SlackUser("@ben")
fmt.Println(user) //This should print: @ben
如果匹配模式,NewSlackUser
将起作用。如果没有,则会引发错误。
要匹配的模式(基于this)是:
^@[a-z0-9][a-z0-9._-]*$
(我对Go来说很新,所以对我的方法进行任何修改都非常感激)
答案 0 :(得分:4)
使用结构类型:
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
}
完整example