看看这两个简单的包:
package m
const β = 1
package main
import ("m";"fmt")
func main() {
fmt.Println(m.β)
}
当我尝试编译它时出现此错误:
$ GOPATH=`pwd` go run a.go
# command-line-arguments
./a.go:4: cannot refer to unexported name m.β
./a.go:4: undefined: m.β
为什么呢?我尝试用两个包中的B替换β,它可以工作,但我试图在这里使用正确的符号。也许这两个软件包出于某种原因使用了同形字或不同的编码?
答案 0 :(得分:11)
go规范说明如果
导出标识符标识符名称的第一个字符是Unicode大写 字母(Unicode类“Lu”)
https://golang.org/ref/spec#Exported_identifiers
func main() {
fmt.Println(unicode.IsUpper('β'))
}
返回
false
答案 1 :(得分:3)
答案 2 :(得分:1)
导出包中的函数,方法需要以大写字母开头。昨天遇到同样的问题Error in importing custom packages in Go Lang
答案 3 :(得分:1)
导出的标识符名称的第一个字符必须是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
The Go Programming Language Specification
可以导出标识符以允许从另一个标识符访问它 包。如果两者都导出标识符:
- 标识符名称的第一个字符是Unicode大写字母(Unicode类“Lu”);和
- 标识符在包块中声明,或者是字段名称或方法名称。
醇>不会导出所有其他标识符。
Greek alphabet:ββbetal