Rumah >pembangunan bahagian belakang >Golang >golang menggunakan functools.kaedah separa atau serupa untuk melengkapkan pembungkusan fungsi lain

golang menggunakan functools.kaedah separa atau serupa untuk melengkapkan pembungkusan fungsi lain

王林
王林ke hadapan
2024-02-06 10:15:07985semak imbas

golang 使用 functools.partial 或类似的方法来完成包装其他函数

Isi soalan

(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?


Jawapan yang betul


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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam