是否可以针对反引号键入断言?

Is it possible to type assert against backticks?

我想根据输入是字符串还是反引号来实现逻辑分支。

如果它是一个字符串,我会将输入与预期值进行简单比较,但如果输入是反引号(例如 `foo\d{1,3}`),那么我想使用 regexp.MatchString 之类的东西来检查我对输入的期望值。

所以我的问题是:您可以针对输入键入 assert 以检查它是反引号还是标准字符串类型?

更新:或者更具体地说,如果我正在处理字符串类型,我想使用字符串函数;如果我正在处理正则表达式类型,我想使用正则表达式函数

谢谢!

不,你不能区分由 "" 或 `` 组成的字符串。

听起来您想使用字符串或正则表达式类型:

  1. 你可以通过接口和开关类型
  2. 您可以使用字符串类型和分隔符,例如 // 来指示正则表达式
  3. 您可以编写两个函数,它们做不同的事情并采用不同的参数
  4. 您可以将两者都保存在结构中,并且仅在填写时使用正则表达式

在不知道您要解决什么问题的情况下很难知道哪个是最好的,但您可能不想使用 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"))
}