看看这两个简单的包:package mconst β = 1package mainimport ("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 替换 β ,它有效,但我试图在这里使用正确的符号。也许两个包出于某种原因都使用同形文字或不同的编码?
3 回答

泛舟湖上清波郎朗
TA贡献1818条经验 获得超3个赞
导出标识符名称的第一个字符必须是 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
Go 编程语言规范
导出的标识符
可以导出标识符以允许从另一个包访问它。如果同时满足以下条件,则会导出标识符:
标识符名称的第一个字符是 Unicode 大写字母(Unicode 类“Lu”);和
标识符在包块中声明,或者它是字段名称或方法名称。
不导出所有其他标识符。
- 3 回答
- 0 关注
- 213 浏览
添加回答
举报
0/150
提交
取消