Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建从匹配模式的字符串派生的Go类型?_Go_Types - Fatal编程技术网

如何创建从匹配模式的字符串派生的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.-]*$ (我是新手,因此非常感谢对我方法

我正在尝试创建一个新的Go类型,它基于
字符串
,但需要匹配一个模式(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
}
完整的

请参见