Golang(初学者):避免处理字符串或整数的重复函数

Golang(初学者):避免处理字符串或整数的重复函数,go,Go,我今天开始学围棋,所以这可能是个愚蠢的问题。我习惯了PHP,因此我不必声明变量类型 我目前正在将一些常用的PHP函数转换为Go函数。我有一个函数,可以将数组转换为哈希表,以便以后快速查找(比遍历数组查看值是否存在要快得多,相反,值会变成键) 在我看来,我必须创建两个独立的函数,一个用于字符串,一个用于整数(uint,因为我不需要有符号整数)。为了便于维护,我更希望有一个函数可以接受string或uint并返回相同的值,即它可以工作并返回我最初传递给函数的任何值 目前我有: // Array2M

我今天开始学围棋,所以这可能是个愚蠢的问题。我习惯了PHP,因此我不必声明变量类型

我目前正在将一些常用的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
}

这可能吗?

泛型在Go中还不存在(尽管有很多关于它的内容。目前,我认为您当前的方向是您唯一的选择。

简短回答:-并将其称为SliceToMap,因为[]uint或[]string是Go中的一个片段。您的函数将接受一个接口{},键入assert it,在将新映射作为接口{}返回之前,在旧映射上创建一个新映射和范围,以将每个值复制到新映射中。调用者需要在检查键之前键入assert映射。这似乎比仅使用两个单独的函数更复杂。如果您需要两个以上的函数,请查看项目以了解如何减少此操作的痛苦。