Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mencipta Sekeping Fungsi dengan Tandatangan Berbeza dalam Go?

Bagaimanakah Saya Boleh Mencipta Sekeping Fungsi dengan Tandatangan Berbeza dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-26 05:01:10441semak imbas

How Can I Create a Slice of Functions with Different Signatures in Go?

Mencipta Sekeping Fungsi dengan Tanda Tangan Berbeza

Masalah

Bagaimanakah anda boleh mencipta sekeping fungsi dengan tandatangan berbeza dalam Go?

Konteks

Sistem jenis Go adalah secara statik ditaip, yang bermaksud bahawa fungsi mesti mempunyai tandatangan tetap pada masa penyusunan. Walau bagaimanapun, ia boleh berguna untuk membuat kepingan fungsi yang boleh menerima hujah daripada jenis atau nombor yang berbeza.

Penyelesaian

Walaupun kod yang disediakan berfungsi, ia memerlukan penggunaan penyataan suis untuk mengendalikan setiap jenis tandatangan fungsi. Penyelesaian yang lebih ringkas dan fleksibel ialah menggunakan pantulan.

Berikut ialah contoh:

package main

import (
    "fmt"
    "reflect"
)

type Executor func(...interface{})

func main() {
    functions := []Executor{
        func(a, b int) { fmt.Println(a + b) },
        func(s string) { fmt.Println(s) },
        func() { fmt.Println("No arguments") },
    }

    for _, f := range functions {
        numIn := reflect.TypeOf(f).NumIn()
        args := make([]reflect.Value, numIn)

        for i := 0; i < numIn; i++ {
            switch reflect.TypeOf(f).In(i).Kind() {
            case reflect.Int:
                args[i] = reflect.ValueOf(12)
            case reflect.String:
                args[i] = reflect.ValueOf("Hello")
            default:
                args[i] = reflect.Value{}
            }
        }

        f.Call(args)
    }
}

Dalam penyelesaian ini, kami mencipta sekeping fungsi Pelaksana, yang merupakan fungsi yang menerima sebarang bilangan hujah. Pakej reflect digunakan untuk menentukan bilangan dan jenis argumen yang dijangkakan oleh setiap fungsi dan menjana pantulan yang sepadan. Potongan nilai.

Menggunakan pantulan membolehkan kami memanggil fungsi secara dinamik dengan tandatangan yang berbeza-beza tanpa memerlukan suis jenis atau antara muka{} hirisan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Sekeping Fungsi dengan Tandatangan Berbeza dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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