为什么 go build 会因为 regexp.MustCompile 解析错误而成功?
Why does go build succeed for a regexp.MustCompile parsing error?
go run
或 go 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
编译器不分析您的正则表达式。它是在运行时完成的。
"Compile"部分"MustCompile"函数名代表正则表达式的编译。
go run
或 go 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
编译器不分析您的正则表达式。它是在运行时完成的。 "Compile"部分"MustCompile"函数名代表正则表达式的编译。