Сложные типы данных в качестве ключей в картах в Go

Я пытаюсь создать карту в Go, которая содержит ключи с большими целыми числами. В Effective Go прямо говорится, что:

Структуры, массивы и срезы нельзя использовать в качестве ключей карты, потому что для этих типов не определено равенство.

что имеет смысл. Конечно, я мог бы преобразовать большие целые числа в строки и использовать строку в качестве ключа, но я ищу здесь более общее решение. Могу ли я превратить мою структуру в нечто (интерфейс?), Реализующее функцию равенства, и использовать ее вместо этого?

Пример кода, который, конечно, не работает:

package main                                                                                                           

import (                                                                                                               
        "big"                                                                                                          
        "fmt"                                                                                                          
)                                                                                                                      

func main() {                                                                                                          
        one1 := big.NewInt(1)                                                                                          
        one2 := big.NewInt(1)                                                                                          

        hmap := make(map[*big.Int] int)                                                                                
        hmap[one1] = 2                                                                                                 
        _, exists := hmap[one2]                                                                                        
        fmt.Printf("Exists=%v\n", exists)                                                                              
}                                                                                                                      
10
задан Olof 9 November 2011 в 20:42
поделиться