Modifica: il mio codice iniziale in realtà consentiva ancora la sintassi della mappa e quindi consentiva l'esclusione dei metodi. Questa versione è più sicura.
È possibile "derivare" un tipo. In Go diciamo semplicemente di dichiarare. Quindi definisci i metodi sul tuo tipo. Basta un involucro molto sottile per fornire la funzionalità desiderata. Nota, però, che devi chiamare get e impostare con la sintassi di chiamata del metodo ordinario. Non c'è modo di mantenere la sintassi dell'indice o il risultato ok opzionale che hanno le mappe incorporate.
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)
}
Eseguire la mappatura su piegatrice Unicode ogni volta, manualmente. – tchrist
SCL, sei interessato con Unicode in questo caso? Cioè, le tue esigenze includono il rifiuto di punti di codice Unicode inaspettati o un'attenta attenzione alla gestione dei punti di codice Unicode previsti? – Sonia
@sonia, ciao, stavo considerando solo ASCII. Ma dal momento che stai chiedendo, come gestirò Unicode? –