通过在任何函数之外定义对象,我可以轻松地使对象成为全局对象,但这对于必须创建的某些结构不起作用.
我想要做的是这个更复杂的版本:
package main
import "regexp"
func doSomething(test []byte) []byte {
test = reg.ReplaceAll(test,nil)
return test
}
reg, _ := regexp.Compile(`[^a-z\s]`) // this is the issue
func main() {
thing := doSomething("somebytes")
}
Run Code Online (Sandbox Code Playgroud)
显然上面是不允许的,但这就是我想做的事情.
似乎没有任何方法reg
可以在doSomething
不传递的情况下从函数内部访问该对象,我想避免这种情况,因为我将要做几十亿次.
如果我把它放进去,main()
它就不再是全球性的了.我甚至试过这个:
var reg regexp.Regexp
func main() {
reg, _ = regexp.Compile(`[^a-z\s]`)
thing := doSomething("somebytes")
}
Run Code Online (Sandbox Code Playgroud)
......但这也不起作用,它给了我一个错误.
有任何想法吗?
更新:我的问题实际上不是正则表达式.那就是一个例子.
One*_*One 10
它允许很好,你可以使用:
var reg = regexp.MustCompile(`[^a-z\s]`) //or even
var reg, _ = regexp.Compile(`[^a-z\s]`) // MustCompile is the better choice though.
Run Code Online (Sandbox Code Playgroud)
还要记住regexp.Compile
/ regexp.MustCompile
返回一个指针,这就是为什么你的第二次尝试不起作用,你分配*regexp.Regexp
给regexp.Regexp
.
完整示例:
func doSomething(test []byte) []byte {
test = reg.ReplaceAll(test, nil)
return test
}
var (
reg, _ = regexp.Compile(`[^a-z\s]`)
reg2 *regexp.Regexp
)
func init() { //different way of initializing global valuables
reg2 = regexp.MustCompile(`[^a-z\s]`)
}
func main() {
thing := doSomething([]byte("somebytes"))
fmt.Println(thing)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1649 次 |
最近记录: |