我想根据输入是字符串还是反引号来实现逻辑分支。
如果是字符串,我将输入与期望值进行简单的比较,但是如果输入是反引号(例如`foo \ d {1,3}`),那么我要检查我的期望值反对使用类似regexp.MatchString这样的输入。
所以我的问题是:您可以针对输入键入assert来检查它是反引号还是标准字符串类型?
更新:或更具体地说,如果要处理字符串类型,我想使用字符串函数,如果要处理正则表达式类型,我想使用正则表达式函数
谢谢!
答案 0 :(得分:1)
不,您不能区分使用“”或“组成的字符串。
想要使用字符串或正则表达式类型的声音:
在不知道您要解决的问题的情况下很难知道哪个是最好的,但是您可能不想使用interface {}或只使用字符串并失去类型安全性。因此,采用选项4,您可能会遇到类似这样的情况:
https://play.golang.org/p/Y5e3URTRFIR
type Pattern struct {
pattern string
regexp *regexp.Regexp
}
func (p Pattern) Match(input string) bool {
if p.regexp != nil {
return p.regexp.MatchString(input)
}
return input == p.pattern
}
func main() {
patt := Pattern{pattern: "hello"}
fmt.Printf("Matching string:%v\n", patt.Match("hello"))
rpatt := Pattern{pattern:
"hello",regexp:regexp.MustCompile("hello\\d{3}")}
fmt.Printf("Matching regexp:%v\n", rpatt.Match("hello123"))
}