Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pelbagai jenis fungsi dalam pemetaan, Golang

Pelbagai jenis fungsi dalam pemetaan, Golang

WBOY
WBOYke hadapan
2024-02-12 08:39:09858semak imbas

Pelbagai jenis fungsi dalam pemetaan, Golang

Map ialah struktur data yang berkuasa di Golang yang membolehkan kami mengaitkan satu nilai dengan nilai lain. Di Golang, kita boleh menggunakan pemetaan untuk melaksanakan pelbagai jenis fungsi. Editor PHP Youzi akan memperkenalkan pelbagai jenis fungsi dalam pemetaan dalam artikel ini, termasuk fungsi biasa, fungsi tanpa nama dan kaedah. Bukan itu sahaja, kami akan meneroka cara menggunakan fungsi sebagai nilai dalam pemetaan dan menunjukkan kuasa dan fleksibilitinya. Sama ada anda seorang pemula atau pembangun Golang yang berpengalaman, artikel ini akan memberikan anda pengetahuan dan contoh yang berguna untuk membantu anda memahami dan menggunakan jenis fungsi dengan lebih baik dalam pemetaan. Mari mulakan meneroka!

Kandungan soalan

Saya mahu menyambungkan input pengguna ke fungsi. Input pengguna ialah rentetan. Sebagai contoh, "func_name=MyPrintf&s1=你好,世界!" atau "func_name=MyAdd&i1=1&i2=2"

Kod setiap fungsi ialah,

func MyPrintf(s1 string) {
    fmt.Println(s1)
}

func MyAdd(i1, i2 int) {
    fmt.Println(i1, i2)
}

Saya ingin peta seperti di bawah,

type Myfunc func(string) | func(int, int)   // <- Of course, it's wrong code, just I hope like this.

myMap := make(map[string]Myfunc)

myMap["MyPrintf"] = MyPrintf
myMap["MyAdd"] = MyAdd

myMap boleh memanggil fungsi melalui rentetan func_name yang dimasukkan oleh pengguna.

myMap[func_name](s1) Output: Hello, dunia! myMap[func_name](i1, i2) Keluaran: 3

Adakah ini mungkin? Mungkin saya fikir menggunakan "eval" adalah mungkin, tetapi saya mendengar bahawa menggunakan "eval" adalah buruk. Jadi, saya terfikir untuk menggunakan penunjuk fungsi, tetapi tiada penunjuk fungsi di Golang.

Saya mencuba beberapa pengaturcaraan umum Golang,

type Myfunc interface {
    func(string) | func(int, int)
}

myMap := make(map[string]Myfunc)

Output: Ralat berlaku: tidak boleh menggunakan jenis Myfunc di luar kekangan jenis: antara muka mengandungi kekangan jenis

Cuba lagi,

myMap := make(map[string]interface{})

myMap["MyPrintf"] = interface{}(MyPrintf)
myMap["MyPrintf"].(func(string))("Hello, world!")

Output: Hello, dunia!

myMap["MyAdd"] = interface{}(MyAdd)
myMap["MyAdd"].(func(int,int))(1, 2)

Keluaran: 3

Ia berfungsi, tetapi anda perlu menentukan jenis fungsi yang betul, yang tidak begitu selesa. Saya rasa cara ini tidak sesuai untuk senario saya. Tolong beri saya bantuan. Saya minta maaf atas penulisan bahasa Inggeris saya yang teruk.

Penyelesaian

Anda boleh mencuba ini:

Saya mesti mengatakan ini bukan amalan yang baik kerana ralat panik disebabkan oleh jenis yang salah tidak disahkan. Saya akan mempertimbangkan pendekatan lain.

package main

import "fmt"

type GeneralFunc func(args ...interface{})

func main() {
    // Create a map of functions with the type GeneralFunc
    functionsMap := map[string]GeneralFunc{
        "MyPrintf": func(args ...interface{}) { fmt.Println(args[0].(string)) },
        "MyAdd":    func(args ...interface{}) { fmt.Println(args[0].(int), args[1].(int)) },
    }

    // Use the functions from the map
    functionsMap["MyPrintf"]("Hello World")
    functionsMap["MyAdd"](2, 3)
}

Atas ialah kandungan terperinci Pelbagai jenis fungsi dalam pemetaan, Golang. 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
Artikel sebelumnya:Tapis pertanyaan mongodb GolangArtikel seterusnya:Tapis pertanyaan mongodb Golang