Son*_*nia 11
编辑:我的初始代码实际上仍然允许映射语法,因此允许绕过方法.这个版本更安全.
你可以"派生"一种类型.在Go我们只是说声明.然后在类型上定义方法.它只需要一个非常薄的包装器来提供您想要的功能.但请注意,必须使用普通方法调用语法调用get和set.没有办法保持内置映射的索引语法或可选的ok结果.
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)
}
Run Code Online (Sandbox Code Playgroud)