2017-06-01 117 views
-1

我需要從XML文件讀取數據並將其轉換爲golang中的函數。因爲在golang中我需要在mux.NewRouter()。HandleFunc(「/ url」,functionName)中使用這個函數。我需要一種方法將從XML文件讀取的這個字符串轉換爲函數名稱以用作functionName。如何將字符串轉換爲函數名稱

+1

只有某種註冊表的可能。 [在Golang中調用帶有特殊前綴或後綴的所有函數]的可能副本(https://stackoverflow.com/questions/37384473/call-all-functions-with-special-prefix-or-suffix-in-golang/37384665# 37384665)。 – icza

+1

我看到這樣做的典型方式是在初始化或安裝期間生成一個'map [string] func()'。但是,缺點是所有的函數都需要有相同的簽名(儘管這可能已經是一個要求,如果你調用這些函數不應該知道他們的名字)。如果你需要不同的簽名,你需要一個'switch'或類似的東西。 – Kaedys

回答

0

如果您將所有要調用的函數註冊爲某種類型的方法,則可以執行下列操作。

type Foo struct{} 

func (Foo) Bar() { 
    fmt.Println("foobar") 
} 

... 

f := reflect.ValueOf(Foo{}).MethodByName("Bar").Interface().(func()) 
f() 

如果您反映方法所在的結構體,然後獲取方法的接口值並鍵入將其恢復爲它的func簽名。

Runnable的例子: https://play.golang.org/p/m2nywmeD0Y

相關問題