Golangの正規表現でbool値のみを返す


概要

タイトルのままですが、goの正規表現でbool値のみを返す方法です。

コードと解説

goの正規表現でまず思いつくのがregexp.MatchStringと思いますが、これは2つの返却を行います。
一つはマッチしているかどうかのbool値、もう一つはエラーです。

main.go
package main

import "fmt"
import "regexp"


func main() {
    str := "abc"
    b, err := IsMatch(str)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(b)
}

func IsMatch(str string) (bool, error){
    return regexp.MatchString(`^[0-9]+$`, str)
}

例えるならこんな感じでしょうか?
めんどくさいのでエラーを_にしたいな…と思うところです。
が、コーデイング規約等によって、errは握りつぶしてはダメ。という開発現場も多いと思います。(実際_して握りつぶすのはどうかと思うわけです)

そんな時はMustCompileMatchStringを使います。
使い方は以下の通り。

main.go
package main

import "fmt"
import "regexp"

var r *regexp.Regexp

func init() {
    r = regexp.MustCompile(`^[0-9]+$`)
}

func main() {
    str := "abc"
    b := r.MatchString(str)

    fmt.Println(b)
}

とてもコードがスッキリしました。
エラーもbuildが通らない時のみのはずですのでerr判定を行う必要もありません。
PHPなんかだと単純にtruefalseのbool値だけ欲しい。と言う場合もあるかと思います。
それと同じになりますので今後活用できそうです。

追記

@nobonoboさんよりご指摘を頂きましたので一部修正を加えております。
init処理で正規表現をコンパイルすることで速度の向上が見込めます。