可以针对反引号输入assert吗?

时间:2018-07-26 18:44:10

标签: string go backticks type-assertion

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

如果是字符串,我将输入与期望值进行简单的比较,但是如果输入是反引号(例如`foo \ d {1,3}`),那么我要检查我的期望值反对使用类似regexp.MatchString这样的输入。

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

不,您不能区分使用“”或“组成的字符串。

想要使用字符串或正则表达式类型的声音:

  1. 您可以通过界面并打开类型
  2. 您可以使用字符串类型和//这样的分隔符来表示正则表达式
  3. 您可以编写两个函数来完成不同的工作并采用不同的参数
  4. 您可以将两者都保留在一个结构中,并且仅在填入后才使用regexp

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