Heim > Artikel > Backend-Entwicklung > Golang verwendet functools.partial oder ähnliche Methoden, um das Umschließen anderer Funktionen abzuschließen
(neu bei Golang)
Angenommen, ich habe zwei Funktionen, die mit der zugrunde liegenden API interagieren, und ich möchte diese beiden Funktionen mit Wiederholung umschließen, aber die beiden Funktionen haben unterschiedliche Eingabeparameter.
In Python würde ich functools.partial
verwenden, um ein Teilfunktionsobjekt zu erstellen und es an
from functools import partial def api_1(a, b, c): print(a, b, c) return true def api_2(x, y): print(x, y) return true def with_retries(func) { retries = 0 while retries < 3: err = func() if not err: break retries += 1 } def main(): with_retries(partial(api_1, 1, 2, 3)) with_retries(partial(api_2, 'x', 'y'))
Wie kann ich anhand des einfachen Beispiels oben etwas Ähnliches in Golang machen? Ich habe mir die functools.partial
-Paketfunktion angesehen, aber sie scheint beim Erstellen einer Teilfunktion nicht die Übergabe aller Argumente zu ermöglichen?
Gibt es in Golang ein völlig anderes Muster, um dieses Wiederholungsmuster zu erreichen?
Wenn ich das richtig verstehe functools.partial
, ermöglicht es Ihnen, Curry-Funktionen zu erstellen.
In Go können Sie Verschlüsse verwenden, um Funktionen zu curryen:
func add(x,y int) int { return x+y } // curries add to yield a function that adds 4 func add4(y int) int { return add(4,y) }
go unterstützt erstklassige Funktionen, sodass Sie Funktionen als Variablen übergeben können. In diesem Beispiel erstellen wir eine Funktion do
,它接受 (a) 任何 int-->int
函数和 (b) int
并返回将该函数应用于 int
, die Folgendes ergibt:
func do(f func(int) int, y int) int { return f(y) }
Und, da do
只需要 int-->int
我们可以使用例如neg
auch folgt:
package main import "fmt" func Add(x, y int) int { return x + y } func Add4(y int) int { return Add(4, y) } func Neg(x int) int { return -x } func Do(f func(int) int, y int) int { return f(y) } func main() { fmt.Println(Add4(6)) fmt.Println(Do(Add4, 6)) fmt.Println(Do(Neg, 6)) }
Siehe: https://www.php.cn/link/7a43ed4e82d06a1e6b2e88518fb8c2b0 p>
Das obige ist der detaillierte Inhalt vonGolang verwendet functools.partial oder ähnliche Methoden, um das Umschließen anderer Funktionen abzuschließen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!