Chcę przedłużyć regexp
ze standardowej biblioteki Go, aby móc zdefiniować własne metody. Używam następujące struct:Zastąpienie struktury zawijania deklaracją typu w Go
type RichRegexp struct {
*regexp.Regexp
}
Jak widać, ta struktura zawiera nic poza zawiniętego regexp.Regexp
. Więc zastanawiam się, czy mogę wymienić to z prostej deklaracji typu jak poniżej:
type RichRegexp regexp.Regexp
Ale jak mam napisać następujący func wtedy?
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?
}
Próbowałem przekonwertować regexp.Regexp
do mojego RichRegexp
ale nie skompilować. Jaki jest ogólny wzór zwracania niestandardowego typu, który otacza typ podstawowy?
'MyRegexp (* x)' nie działa w moim przypadku, ponieważ muszę zwrócić wskaźnik. Jeśli spróbuję 'y: = & MyRegexp (* x)' otrzymuję błąd 'nie może wziąć adresu MyRegexp (* x)' http://play.golang.org/p/HbVoAVM1RY. – deamon
Jeśli chcesz wskaźnik, po prostu przekonwertuj go na wskaźnik 'MyRegexp', tak jak:' (* MyRegexp) (x) '. Zauważ, że nie ma już wymogu dereferencji "x", ponieważ mamy teraz do czynienia ze wskaźnikami. Zobacz [specyfikację] (http://golang.org/ref/spec#Conversions), aby uzyskać dodatkowe informacje :) – nemo
Dziękuję za wyjaśnienia. '(* MyRegexp) (x)' jest tym, co sugeruje również "jnml". – deamon