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

标签 string go backticks type-assertion

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

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

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

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

谢谢!

最佳答案

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

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

  1. 你可以传递接口(interface)并打开类型
  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"))
}

关于string - 是否可以针对反引号键入断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51545633/

相关文章:

c - 如何从 C 语言中的字符串获取并计算表达式

r - 从R中的字符串中提取数字

reflection - 在go中发现当前函数的返回类型

image - 重复调用 image.png.Decode() 导致内存不足错误

perl - 异步运行 perl 的反引号

c++ - 从字符串数组中获取字符值

android - 哈希表和字符串值错误

string - Golang 中是否有可用的文本数据类型?

Mysql在应该的时候没有给出语法错误

bash - bash 中反引号中使用的有效命令?