我想将一个键不敏感的字符串作为键。
语言支持它还是我必须自己创建它?
谢谢你

编辑:我正在寻找的是一种默认设置的方法,而不必每次使用 map 时都记得要转换键。

最佳答案

编辑:我的初始代码实际上仍然允许映射语法,因此可以绕过方法。此版本更安全。

您可以“派生”类型。在Go中,我们只说声明。然后,根据类型定义方法。只需一个非常薄的包装即可提供所需的功能。但是请注意,必须使用普通方法调用语法来调用get和set。无法保留内置 map 具有的索引语法或可选的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)
}

10-06 13:17