You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang IF语句中实现类LIKE多选项过滤的最佳实践咨询

Go 多值匹配实现方案

Go 没有原生支持你示例中的like语法,不过可以通过以下几种方案实现同等效果,不同场景对应不同的最佳实践:

方案1:Map集合匹配(性能最优,推荐绝大多数场景使用)

提前把需要匹配的值存入map作为键,查询时间复杂度为O(1),匹配项越多优势越明显,用空结构体作为值不会占用额外内存:

s1 := "lorem ipsum"
sum := 0
// 初始化匹配集合
matchSet := map[rune]struct{}{
    'a': {}, 'i': {}, 'u': {}, 'e': {}, 'o': {},
}

for _, v := range s1 {
    if _, ok := matchSet[v]; ok {
        sum += 1
    }
}

方案2:slices.Contains匹配(Go 1.21+支持,适合少量匹配项场景)

如果匹配项只有几个,用标准库slices的Contains方法写法最简洁易读,缺点是查询时间复杂度为O(n):

import "slices"

s1 := "lorem ipsum"
sum := 0
matchList := []rune{'a', 'i', 'u', 'e', 'o'}

for _, v := range s1 {
    if slices.Contains(matchList, v) {
        sum += 1
    }
}

方案3:正则匹配(适合复杂模糊匹配场景)

如果你需要实现类似SQL LIKE的模糊匹配(比如前缀、后缀、包含特定规则的匹配),可以用标准库regexp包实现:

import "regexp"

s1 := "lorem ipsum"
// 正则匹配所有元音字符
re := regexp.MustCompile(`[aiueo]`)
sum := len(re.FindAllString(s1, -1))

这种方式适合规则复杂的匹配场景,性能低于前两种,不建议用来做简单的固定值匹配。

内容的提问来源于stack exchange,提问作者Nanda Fitra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 21:36:00