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

Pelbagai jenis fungsi dalam pemetaan, Golang

WBOY
Lepaskan: 2024-02-12 08:39:09
ke hadapan
909 orang telah melayarinya

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

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

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

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

Output: Hello, dunia!

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

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

Atas ialah kandungan terperinci Pelbagai jenis fungsi dalam pemetaan, Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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