此问题已在此处有答案:
Public, Private - Upper Case, Lower Case:(3个答案)
上个月关门了。
当我在学习“A Tour Of Go”的时候,我偶然发现这个“struct”教程中所有的变量名都是以大写字母开始的,像这样:a tour of go: more types
package main
import "fmt"
type Vertex struct {
X int
Y int
}
func main() {
fmt.Println(Vertex{1, 2})
}
“X”和“Y”是大写字母。
但是,如果我在Vertex结构中使用“x”而不是“X”,程序也会给予正确的输出:{1 2}
那么变量名不使用大写字母有什么区别吗?
2条答案
按热度按时间gzszwxb41#
为什么“struct”中的变量需要以大写字母开始?
它不需要**。正如您所看到的,即使将字段重命名为小写,程序仍然可以编译和运行。因此,这不是一个要求。
那么变量名不使用大写字母有什么区别吗?
是的
以大写字母开始的标识符(包括结构体字段)是
exported
,以小写字母或下划线开头的标识符是unexported
。这类似于其他语言中的private
、public
访问限定符。reflect
包对其他包中声明的未导出字段具有只读访问权限,这就是为什么fmt.Println
(使用reflect
)能够打印Vertex struct{ x, y int }
的内容。参见官方规格:https://go.dev/ref/spec#Exported_identifiers
dba5bblo2#
据我所知,golang中的命名约定是非常直接的,大写的部分表示可见性:“* 如果一个标识符需要在包外可见,它的第一个字符应该是。如果你不打算在另一个包中使用它,你可以安全地坚持使用mixedCaps。