Rumah >pembangunan bahagian belakang >Golang >golang menggunakan functools.kaedah separa atau serupa untuk melengkapkan pembungkusan fungsi lain
(baru kenal golang)
Andaikan saya mempunyai dua fungsi yang berinteraksi dengan api asas, dan saya ingin membungkus kedua-dua fungsi ini dengan cuba semula, tetapi kedua-dua fungsi mempunyai parameter input yang berbeza.
Dalam python saya akan menggunakan functools.partial
untuk mencipta objek func separa dan menyampaikannya kepada
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'))
Menggunakan contoh mudah di atas, bagaimana saya boleh melakukan sesuatu yang serupa dalam golang? Saya melihat fungsi pakej functools.partial
tetapi ia nampaknya tidak membenarkan menghantar semua hujah apabila mencipta fungsi separa?
Adakah terdapat corak yang berbeza sama sekali dalam golang untuk mencapai corak cuba semula ini?
Jika saya faham dengan betul functools.partial
, ia membolehkan anda untuk kari fungsi.
Seterusnya, anda boleh menggunakan penutup untuk fungsi kari:
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 menyokong fungsi kelas pertama, jadi anda boleh menghantar fungsi sebagai pembolehubah. Dalam contoh ini, kami mencipta fungsi do
,它接受 (a) 任何 int-->int
函数和 (b) int
并返回将该函数应用于 int
yang menghasilkan:
func do(f func(int) int, y int) int { return f(y) }
Dan, kerana do
只需要 int-->int
我们可以使用例如neg
juga mengikuti:
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)) }
Lihat: https://www.php.cn/link/7a43ed4e82d06a1e6b2e88518fb8c2b0 p>
Atas ialah kandungan terperinci golang menggunakan functools.kaedah separa atau serupa untuk melengkapkan pembungkusan fungsi lain. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!