我想根据输入是字符串还是反引号来实现逻辑分支。
如果它是一个字符串,我将对输入与预期值进行简单比较,但如果输入是反引号(例如 `foo\d{1,3}`),那么我想检查我的预期值而是使用 regexp.MatchString 之类的东西来反对输入。
所以我的问题是:您可以针对输入键入断言以检查它是反引号还是标准字符串类型?
更新:或者更具体地说,如果我正在处理字符串类型,我想使用字符串函数;如果我正在处理正则表达式类型,我想使用正则表达式函数
谢谢!
最佳答案
不,你不能区分由 ""或 `` 组成的字符串。
听起来您想使用字符串或正则表达式类型:
- 你可以传递接口(interface)并打开类型
- 您可以使用字符串类型和分隔符(例如//)来指示正则表达式
- 你可以编写两个函数,它们做不同的事情并采用不同的参数
- 您可以将两者都保存在一个结构中,并且只在填写时使用正则表达式
如果不知道您要解决什么问题,很难知道哪个是最好的,但您可能不想使用 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"))
}
关于string - 是否可以针对反引号键入断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51545633/