GOOGLE ADS

Freitag, 29. April 2022

Wie konvertiere ich von `func() *int` in `func() interface{}`?

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() *intmöglich func() interface{}? Wenn das so ist, wie?


Lösung des Problems

Mit go 1.18kö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 decorateFnkann zur Kompilierzeit durch Untersuchen fndes Typs von abgeleitet werden.

https://go.dev/play/p/AAByiBFRQch

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...