Editar: Mi código inicial aún permitía la sintaxis del mapa y permitía eludir los métodos. Esta versión es más segura.
Puede "derivar" un tipo. En Go solo decimos declarar. Luego defines los métodos en tu tipo. Solo se necesita una envoltura muy delgada para proporcionar la funcionalidad que desea. Sin embargo, tenga en cuenta que debe llamar a get y establecer con sintaxis de llamada de método ordinario. No hay forma de mantener la sintaxis de índice o el resultado de autorización opcional que tienen los mapas integrados.
package main
import (
"fmt"
"strings"
)
type ciMap struct {
m map[string]bool
}
func newCiMap() ciMap {
return ciMap{m: make(map[string]bool)}
}
func (m ciMap) set(s string, b bool) {
m.m[strings.ToLower(s)] = b
}
func (m ciMap) get(s string) (b, ok bool) {
b, ok = m.m[strings.ToLower(s)]
return
}
func main() {
m := newCiMap()
m.set("key1", true)
m.set("kEy1", false)
k := "keY1"
b, _ := m.get(k)
fmt.Println(k, "value is", b)
}
Mapa de la carpeta Unicode cada vez, manualmente. – tchrist
SCL, ¿te preocupa Unicode en este caso? Es decir, ¿sus necesidades incluyen el rechazo de puntos de código Unicode inesperados o una atención cuidadosa al manejo de los puntos de código Unicode esperados? – Sonia
@sonia, hola, estaba considerando solo ASCII. Pero ya que estás preguntando, ¿cómo manejaría Unicode? –