3
我今天開始學習Go,所以這可能是一個愚蠢的問題。我習慣於PHP,因此我不必聲明變量類型。Golang(初學者):避免重複函數來處理字符串或整數
我目前正在將一些常用的PHP函數轉換爲Go函數。我有一個將數組轉換爲哈希表的函數,以便稍後進行快速查找(比遍歷數組遍歷更快,以查看值是否存在,取而代之的是數值)。
在我看來,我必須創建兩個單獨的函數,一個用於字符串,另一個用於整數(因爲我不需要帶符號整數,所以uint
)。爲了維護起見,我希望有一個函數可以接受string
或uint
並返回相同的結果,即它可以工作並返回我最初傳遞給該函數的任何東西。
目前我有這樣的:
// Array2Map_string makes a map out of an array of strings: word=>false
func Array2Map_string(a []string) map[string]bool {
mc := make(map[string]bool)
for _,tok := range a {
mc[tok]=false
}
return mc
}
// Array2Map_int makes a map out of an array of integers: int=>false
func Array2Map_int(a []uint) map[uint]bool {
mc := make(map[uint]bool)
for _,tok := range a {
mc[tok]=false
}
return mc
}
我想是有一個單一的功能,將創建並返回一個字符串基於哈希表的,如果我發送一個字符串數組功能,或UINT基於哈希表如果我發送一個uint數組到該函數。例如:
// Array2Map makes a map out of an array of strings whereby the key is
func Array2Map(a []whatever) map[whatever]bool {
mc := make(map[whatever]bool)
for _,tok := range a {
mc[tok]=false
}
return mc
}
這可能嗎? 。
簡短的回答:http://golang.org/ doc/effective_go.html#interface_conversions - 並將其稱爲SliceToMap,因爲[] uint或[]字符串是Go中的一個切片,您的函數將接受一個接口{},鍵入斷言,創建一個新地圖並覆蓋舊地圖在將新地圖作爲接口返回之前,將每個值複製到新地圖中。調用者需要在檢查密鑰之前鍵入斷言地圖 – elithrar
似乎這可能比僅使用兩個單獨的函數更復雜。 – Alasdair
查看[gen](http://clipperhouse.github.io/gen/)項目的想法,使其成爲如果你需要的不僅僅是兩個,那麼就不那麼痛苦了。 –