Как создать общую функцию для получения карты в Go Lang? - PullRequest
0 голосов
/ 19 апреля 2019

как я могу передать данные карты в общую функцию (isExist), чтобы проверить, существует ли заданное значение или нет, передавая тип карты, может быть map [int] int или строка map [string] или любая

func IsExist(text int, data map[interface{}]interface{}) bool {

    for key, _ := range data {

        if data[key] == text {

            return true

        }

    }

    return false

}

func main() {

    var data = make(map[string]int)

    //var data =map[interface {}]interface{}  this case will working fine

    data["a"] = 1

    data["b"] = 2

    fmt.Println(IsExist(2, data))
    //throwing error that 'cannot use data (type map[string]int) as type  map[interface {}]interface {} in argument to IsExist'

}

Пожалуйста, дайте мне знать, как вы можете обобщить это?

1 Ответ

2 голосов
/ 19 апреля 2019

Система типов Go не может этого сделать.map[string]int и map[interface {}]interface{} являются различными типами.Кроме того, хранение / представление объектов в памяти зависит от типа.Строка имеет один макет памяти.Но та же самая строка, упакованная как interface{} - совершенно другая.По тем же причинам вы не можете «разыграть» []int до []interface{}.Вы должны скопировать элементы в новый фрагмент.

То же самое здесь.Либо сделайте вашу карту map[interface {}]interface{} с самого начала, либо скопируйте все пары ключ-значение в одну до вызова универсальной функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...