登录
首页 >  Golang >  Go问答

为何在使用 regexp.MustCompile 时 go build 却没有报错?

来源:stackoverflow

时间:2024-03-24 16:45:42 322浏览 收藏

在使用 `regexp.MustCompile` 函数时,`go build` 不会报错,但 `go run` 或 `go test` 会失败。这是因为编译器不会分析正则表达式,而是在运行时完成的。因此,在编译时不会检测到正则表达式中的错误,而是在运行时引发 panic。

问题内容

对于 go rungo test (编译然后运行)失败,但对于 go build (仅编译)失败。我本以为 mustcompile 与编译有关,而不是运行时。

package main

import (
    "regexp"
)

var someinvalidregex = regexp.mustcompile(`(?!`)

func main() {
    someinvalidregex.matchstring("foo")
}

运行时失败:

$ go run main.go
panic: regexp: compile(`(?!`): error parsing regexp: invalid or unsupported perl syntax: `(?!`

goroutine 1 [running]:
regexp.mustcompile(0x10b7d19, 0x3, 0xc420022070)
    /usr/local/cellar/go/1.10.3/libexec/src/regexp/regexp.go:240 +0x171
exit status 2

编译成功:

$ go build -o foo
$ echo $?
0

运行时再次失败:

$ ./foo
panic: regexp: Compile(`(?!`): error parsing regexp: invalid or unsupported Perl syntax: `(?!`

goroutine 1 [running]:
regexp.MustCompile(0x10b7d19, 0x3, 0xc420022070)
    /usr/local/Cellar/go/1.10.3/libexec/src/regexp/regexp.go:240 +0x171

解决方案


编译器不会分析您的正则表达式。它是在运行时完成的。 “MustCompile”函数名中的“Compile”部分代表正则表达式的编译。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《为何在使用 regexp.MustCompile 时 go build 却没有报错?》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>