私は独自のメソッドを定義できるようにGo標準ライブラリからregexp
を拡張したいと考えています。私は、次の構造体を使用します。あなたが見ることができるようにラップ構造体をGoの型宣言に置き換えます
type RichRegexp struct {
*regexp.Regexp
}
を、この構造体は、ラップregexp.Regexp
しか含まれていません。だから、私はこのような単純な型宣言でこれを置き換えることができるかどうかを疑問に思う:
type RichRegexp regexp.Regexp
しかし、どのように、私は次のFUNCを書くべきですか?
func Compile(expression string) (*RichRegexp, error) {
regex, err := regexp.Compile(expression)
if err != nil {
return nil, err
}
return &RichRegexp{regex}, nil // How to do this?
}
私は私のRichRegexp
にregexp.Regexp
を変換しようとしたが、それはコンパイルされませんでした。基礎となる型をラップするカスタム型を返す一般的なパターンは何ですか?また、ここで
'MyRegexpは(* x)'は、私の場合には動作しません。私は 'をしようとすると、Y:=&MyRegexp(* x)'は、私はエラーを取得する 'MyRegexpのアドレスを取ることができない(* x)'はhttp://play.golang.org/p/HbVoAVM1RY。 – deamon
ポインタが必要な場合は、 '(* MyRegexp)(x)'のように 'MyRegexp'のポインタに変換するだけです。ポインタを扱っているので、 'x'の逆参照がもう必要ないことに注意してください。詳細については、[the spec](http://golang.org/ref/spec#Conversions)を参照してください。 – nemo
あなたの説明をありがとう。 '(* MyRegexp)(x)'は 'jnml'も提案したものです。 – deamon