Desidero estendere il regexp
dalla libreria standard Go per poter definire i miei metodi. Io uso il seguente struct:Sostituire struct wrapping con una dichiarazione di tipo in Go
type RichRegexp struct {
*regexp.Regexp
}
Come si può vedere, questa struct contiene nient'altro che la avvolto regexp.Regexp
. Allora mi chiedo se potevo sostituire questo con una semplice dichiarazione di tipo simile a questo:
type RichRegexp regexp.Regexp
Ma come avrei dovuto scrivere il seguente func allora?
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?
}
ho cercato di convertire regexp.Regexp
al mio RichRegexp
ma non ha compilato. Qual è lo schema generale per restituire un tipo personalizzato che avvolge un tipo sottostante?
'MyRegexp (* x)' non funziona nel mio caso, poiché devo restituire un puntatore. Se provo 'y: = & MyRegexp (* x)' Ricevo l'errore 'non posso prendere l'indirizzo di MyRegexp (* x)' http://play.golang.org/p/HbVoAVM1RY. – deamon
Se si desidera un puntatore, convertirlo semplicemente in un puntatore di "MyRegexp" in questo modo: '(* MyRegexp) (x)'. Nota che non è più necessario il dereferenciation di 'x', dato che ora ci occupiamo di puntatori. Vedi [le specifiche] (http://golang.org/ref/spec#Conversions) per ulteriori informazioni :) – nemo
Grazie per le tue spiegazioni. '(* MyRegexp) (x)' è anche quello che suggerisce 'jnml'. – deamon