Ich hätte gerne so etwas wie die folgende Funktion:
func decorateFn(fn func() interface{}) interface{} {
decorate()
return fn()
}
func decorateFnInt(fn func() *int) *int {
return decorateFn(fn).(*int)
}
Verwenden decorateFn((func() interface{})(fn)).(*int)
funktioniert nicht. Ist eine Umrechnung func() *int
möglich func() interface{}
? Wenn das so ist, wie?
Lösung des Problems
Mit go 1.18
können Sie Generics verwenden, um dies zu erreichen - die Sicherheit des Kompilierzeittyps und keine Typzusicherungen zur Laufzeit gewährleisten:
func decorateFn[T any](fn func() T) T {
decorate()
return fn()
}
func decorateFnInt(fn func() *int) *int {
return decorateFn(fn)
}
Die Typbeschränkung der Funktion decorateFn
kann zur Kompilierzeit durch Untersuchen fn
des Typs von abgeleitet werden.
https://go.dev/play/p/AAByiBFRQch
Keine Kommentare:
Kommentar veröffentlichen