The Go spec states:¿Cómo creo un string de mapa [[16]] [] en Go?
The comparison operators == and != (§Comparison operators) must be fully defined for operands of the key type; thus the key type must not be a struct, array or slice. If the key type is an interface type, these comparison operators must be defined for the dynamic key values; failure will cause a run-time panic.
Deseo crear un mapa de valores hash que provienen de la interfaz Hash, que devuelve []byte
, pero para los cuales todos mis hash se hace con el mismo algoritmo (con lo que sé que cabría en [16]byte
). ¿Cómo puedo proporcionar la interfaz adecuada para que el tipo map
permita []byte
o [16]byte
o alguna envoltura del mismo para ser utilizada como clave?
Actualmente mi uso genera el siguiente error:
dupes := make(map[[16]byte][]string)
finddups.go:55: invalid map key type [16]uint8
Update (mar 2012): Go1 permite [16]byte
como tipo de clave.
¿Puede explicar por qué es este el caso? Parece arbitrario convertir a un tipo mágico que sea aceptable. –
@Matt, no es exactamente mágico; la especificación Go incluso dice: 'Las cadenas se comportan como matrices de bytes pero son inmutables'. Por lo tanto, estoy de acuerdo con peterSO en que este es un uso aceptable de esa conversión. Consulte http://golang.org/doc/go_spec.html#String_types – Poindexter
@Poindexter: la inmutabilidad que parece ser la clave (juego de palabras no previsto). También buen nombre jajaja. –