我想從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?
}
我試圖regexp.Regexp
轉化爲我的RichRegexp
但它並沒有編譯。什麼是返回包裝基礎類型的自定義類型的一般模式?
'MyRegexp(* X)'不中我的情況下工作,因爲我必須返回一個指針。如果我嘗試'y:=&MyRegexp(* x)',我得到錯誤'不能接受MyRegexp(* x)的地址'http://play.golang.org/p/HbVoAVM1RY。 – deamon
如果你想要一個指針,只需將它轉換爲MyRegexp的指針就像這樣:'(* MyRegexp)(x)'。請注意,我們現在正在處理指針,因此不再需要「x」的取消引用。請參閱[規範](http://golang.org/ref/spec#Conversions)獲取更多信息:) – nemo
感謝您的解釋。 '(* MyRegexp)(x)'也是'jnml'所建議的。 – deamon