目錄
問題內容
解決方法
首頁 後端開發 Golang 映射中的多種函數類型,Golang

映射中的多種函數類型,Golang

Feb 12, 2024 am 08:39 AM
golang開發

映射中的多種函數類型,Golang

映射是Golang中一種強大的資料結構,它允許我們將一個值與另一個值相關聯。在Golang中,我們可以使用映射來實作各種不同類型的函數。 php小編柚子將在本文中介紹映射中的多種函數類型,包括普通函數、匿名函數和方法。不僅如此,我們還將探討如何在映射中使用函數作為值,並展示它們的強大功能和靈活性。無論您是初學者還是有經驗的Golang開發者,本文都會為您提供有用的知識和實例來幫助您更好地理解和應用映射中的函數類型。讓我們開始探索吧!

問題內容

我希望將使用者輸入連接到函數。使用者輸入是字串。例如, "func_name=MyPrintf&s1=你好,世界\!" 或者 "func_name=MyAdd&i1=1&i2=2"

每個函數的程式碼是,

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

func MyAdd(i1, i2 int) {
    fmt.Println(i1, i2)
}
登入後複製

我想要一張如下圖的地圖,

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 可以透過使用者輸入的 func_name 字串呼叫函數。

myMap[func_name](s1) 輸出:你好,世界! myMap[func_name](i1, i2) 輸出:3

這可能嗎? 也許我認為使用“eval”是可能的,但我聽說使用“eval”不好。所以,我想到使用函數指針,但是Golang中沒有函數指針。

我嘗試了一些 Golang 通用編程,

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

myMap := make(map[string]Myfunc)
登入後複製

輸出:發生錯誤:無法在類型限制之外使用類型 Myfunc:介麵包含類型約束

再嘗試,

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

myMap["MyPrintf"] = interface{}(MyPrintf)
myMap["MyPrintf"].(func(string))("Hello, world!")
登入後複製

輸出:你好,世界!

myMap["MyAdd"] = interface{}(MyAdd)
myMap["MyAdd"].(func(int,int))(1, 2)
登入後複製

輸出:3

它可以工作,但必須指定正確的函數類型,這不太舒服。我認為這種方式不適合我的場景。請給我幫忙。 我為我糟糕的英語寫作感到抱歉。

解決方法

你可以試試看這個:

我必須說這不是一個好的做法,因為錯誤類型導致的恐慌\錯誤沒有得到驗證。我會考慮另一種方法。

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)
}
登入後複製

以上是映射中的多種函數類型,Golang的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Golang開發的安全性挑戰:如何避免被利用用於病毒製作? Golang開發的安全性挑戰:如何避免被利用用於病毒製作? Mar 19, 2024 pm 12:39 PM

Golang開發的安全性挑戰:如何避免被利用用於病毒製作?

利用Golang開發功能強大的桌面應用 利用Golang開發功能強大的桌面應用 Mar 19, 2024 pm 05:45 PM

利用Golang開發功能強大的桌面應用

在Mac上使用Golang程式設計的步驟與技巧 在Mac上使用Golang程式設計的步驟與技巧 Mar 03, 2024 am 08:30 AM

在Mac上使用Golang程式設計的步驟與技巧

Golang開發者常用的程式語言有哪些 Golang開發者常用的程式語言有哪些 Mar 18, 2024 pm 09:06 PM

Golang開發者常用的程式語言有哪些

Golang對區塊鏈發展的影響及作用探究 Golang對區塊鏈發展的影響及作用探究 Feb 26, 2024 pm 04:24 PM

Golang對區塊鏈發展的影響及作用探究

利用Golang開發手遊的優勢與劣勢 利用Golang開發手遊的優勢與劣勢 Mar 05, 2024 pm 03:51 PM

利用Golang開發手遊的優勢與劣勢

Go kit框架助力Golang API效能提升 Go kit框架助力Golang API效能提升 May 07, 2024 pm 03:24 PM

Go kit框架助力Golang API效能提升

使用Golang開發U3D專案的可行性分析 使用Golang開發U3D專案的可行性分析 Mar 20, 2024 pm 02:30 PM

使用Golang開發U3D專案的可行性分析

See all articles