Go 检查是否分配了Unicode代码点

Go 检查是否分配了Unicode代码点,go,unicode,codepoint,Go,Unicode,Codepoint,Go有unicode软件包,其中包含有用的函数,如IsGraphic或IsPrint。但是缺少的一个函数是IsAssigned。当然,我可以使用其他函数编写自己的函数。但我更希望标准库提供此功能。在Java中,编写此函数很容易: boolean isAssigned(int codePoint) { return Character.getType(codePoint) != Character.UNASSIGNED; } 在Go中没有函数unicode.Type(符文)或unicod

Go有
unicode
软件包,其中包含有用的函数,如
IsGraphic
IsPrint
。但是缺少的一个函数是
IsAssigned
。当然,我可以使用其他函数编写自己的函数。但我更希望标准库提供此功能。在Java中,编写此函数很容易:

boolean isAssigned(int codePoint) {
    return Character.getType(codePoint) != Character.UNASSIGNED;
}
在Go中没有函数
unicode.Type(符文)
unicode.IsAssigned(符文)
。我能找到的最接近的是:

func IsAssigned(r rune) bool {
    return unicode.IsControl(r) ||
            unicode.IsGraphic(r) ||
            unicode.IsSymbol(r)
}
但该代码认为U+00AD(软连字符)是未赋值的,这是错误的


如何获得有关未分配代码点的正确信息?

我认为您可以验证是否分配了代码点,以及是否使用了unicode.Categories(尽管效率不高),即


工作示例位于。

您确定所有分配的字符都属于某个类别吗?(这有点明显,但也许你有一个快速的证明)实际上下面的代码显示260+K符文属于类别,而分配的代码点只有130K左右。我做错什么了吗?
func IsAssigned(r rune) bool {
    for _, v := range unicode.Categories {
        if unicode.Is(v, r) {
            return true
        }
    }
    return false
}