Unicode 不能引用未报告的名称m.β;

Unicode 不能引用未报告的名称m.β;,unicode,go,packages,Unicode,Go,Packages,看看这两个简单的软件包: package m const β = 1 当我试图编译它们时,会出现以下错误: $ GOPATH=`pwd` go run a.go # command-line-arguments ./a.go:4: cannot refer to unexported name m.β ./a.go:4: undefined: m.β 为什么??我试着在两个包中用B替换β,这是可行的,但我试着在这里使用正确的符号。可能由于某种原因,这两个包都在使用同形符或不同的编码?β是

看看这两个简单的软件包:

package m
const β = 1
当我试图编译它们时,会出现以下错误:

$ GOPATH=`pwd` go run a.go 
# command-line-arguments
./a.go:4: cannot refer to unexported name m.β
./a.go:4: undefined: m.β

为什么??我试着在两个包中用B替换β,这是可行的,但我试着在这里使用正确的符号。可能由于某种原因,这两个包都在使用同形符或不同的编码?

β是小写的,因此它不会导出,也不能从该包外部使用

fmt.Println(unicode.IsLower('β'))

导出包中的函数、方法需要以大写字母开头。昨天遇到了同样的问题

go规范说,如果

标识符名称的第一个字符是Unicode大写 字母(Unicode类“Lu”)

返回

false

导出标识符名称的第一个字符必须是Unicode大写字母。比如说,

package main

import (
    "fmt"
    "unicode"
)

const Β = 1

func main() {
    const (
        GreekLowerβ = 'β'
        GreekUpperΒ = 'Β'
    )
    fmt.Println(GreekLowerβ, unicode.IsUpper(GreekLowerβ))
    fmt.Println(GreekUpperΒ, unicode.IsUpper(GreekUpperΒ))
}
输出:

946 false
914 true

可以导出标识符以允许从另一个标识符访问它 包裹如果出现以下两种情况,则导出标识符:

  • 标识符名称的第一个字符是Unicode大写字母(Unicode类“Lu”);及
  • 标识符在包块中声明,或者是字段名或方法名
  • 不会导出所有其他标识符



    :Ββbeta

    看起来大写me@Dog不是,如果你认为这是一个bug,你应该报告它。只是在golang nuts邮件列表上打开了一个线程。显然β是一个小写字母,只允许大写标识符;)
    package main
    
    import (
        "fmt"
        "unicode"
    )
    
    const Β = 1
    
    func main() {
        const (
            GreekLowerβ = 'β'
            GreekUpperΒ = 'Β'
        )
        fmt.Println(GreekLowerβ, unicode.IsUpper(GreekLowerβ))
        fmt.Println(GreekUpperΒ, unicode.IsUpper(GreekUpperΒ))
    }
    
    946 false
    914 true