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

王林
Lepaskan: 2024-02-06 10:15:07
ke hadapan
954 orang telah melayarinya

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'))
Salin selepas log masuk

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)
}
Salin selepas log masuk

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)
}
Salin selepas log masuk

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))
}
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!