在 Golang 中的一个 包 中如果定义了 结构体,该结构体的首字母如果小写,那么在其他包中将无法使用该结构体。
如果定义的结构体中名大写,那么其大写的字段可以在另一个包中访问,而其小写的字段则不可以在另一个包中访问。
package package1
type structName struct{
}
我们在包 package1
中定义了一个结构体 structName
,因为其首字母是小写的,因此,该结构体只能在包 package1
中使用,在其他包不能访问。
package package1
type StructName struct{
Field1 FieldType
Field2 FieldType
field3 FieldType
}
我们在包 package1
中定义了一个结构体 StructName
,因为其首字母是大写的,因此,该结构体可以在其他包中使用。
因为其字段名 Field1
和 Field2
首字母是大写的,因此,这两个字段可以在其他包中访问,而字段 field3
是首字母小写的,因此该字段不可以在其他字段访问。
首先,我们在设置的 GOPATH 环境变量对应的路径下的 src 目录下新建一个 haicoder
文件夹,并在 haicoder
文件夹新建一个 info.go
文件,如下图所示:
我们在 info.go
文件里面输入如下内容:
package haicoder
type person struct {
Name string
Age int
}
首先,我们使用 package
关键字定义了该文件所在的包的名字为 haicoder
,接着,在该包里面,定义了一个首字母小写的结构体 person
。结构体 person
有两个字段,一个是 string 类型的 Name
, 一个是 int 类型的的 Age
。
接着,我们在 GOPATH
路径下新建一个 haicoder.go
文件,在文件中,输入以下内容:
package main
//Go语言包结构体可访问性
import (
"fmt"
"haicoder"
)
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
person := haicoder.person{}
fmt.Println(person)
}
即,我们定义了该包的包名为 main 包,同时,我们在 main 包里面同时引入了 fmt 包和 haicoder 包,最后,我们在 main 函数里面,使用 haicoder 包里面的 person 结构体。程序运行后,控制台输出如下:
我们看到,程序运行报错,因此,我们在 haicoder
包定义的结构体名首字母是小写的,而首字母小写的结构体只能在本包使用。所以,在 main
包不能使用 package1
包里面的结构体 person
。接着,我们修改 info.go
文件,如下:
package haicoder
type Person struct {
Name string
Age int
}
即,将首字母小写的结构体 person
修改为了首字母大写的 Person
,同时,修改 haicoder.go
文件如下:
package main
//Go语言包结构体可访问性
import (
"fmt"
"haicoder"
)
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
person := haicoder.Person{}
fmt.Println(person)
}
此时,再次运行程序,输出如下:
我们看到,这次程序没有报错,即我们在 main
包里面成功调用了 haicoder
包里面的首字母大写的结构体。
首先,我们在设置的 GOPATH 环境变量对应的路径下的 src 目录下新建一个 haicoder
文件夹,并在 haicoder
文件夹新建一个 info.go
文件,如下图所示:
我们在 info.go
文件里面输入如下内容:
package haicoder
type Person struct {
Name string
Age int
score float64
sex byte
}
首先,我们使用 package
关键字定义了该文件所在的包的名字为 haicoder
,接着,在该包里面,定义了一个首字母大写的结构体 Person
。结构体 person
有四个字段,两个首字母大写的字段和两个首字母小写的字段。
接着,我们在 GOPATH
路径下新建一个 haicoder.go
文件,在文件中,输入以下内容:
package main
//结构体字段可访问性
import (
"fmt"
"haicoder"
)
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
person := haicoder.Person{
Name:"HaiCoder",
Age:18,
}
fmt.Println(person)
}
即,我们定义了该包的包名为 main 包,同时,我们在 main 包里面同时引入了 fmt 包和 haicoder 包,最后,我们在 main 函数里面,使用 haicoder 包里面的 Person 结构体。程序运行后,控制台输出如下:
我们看到,我们正确设置了 Person
结构体里的 Name
字段和 Age
字段的值,即,在 main
包里面可以使用 package1
包里面的结构体 Person
里面首字母大写的字段。接着,我们修改 haicoder.go
文件,如下:
package main
//结构体字段可访问性
import (
"fmt"
"haicoder"
)
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
person := haicoder.Person{
Name:"HaiCoder",
Age:18,
score:99.0,
sex:'M',
}
fmt.Println(person)
}
即,我们在 main
包里访问 haicoder
包里首字母小写的字段,运行后,程序输出如下:
我们看到,这次程序报错,即我们在 main
包调用 haicoder
包里面结构体中的首字母小写的字段,程序报错。
在 Golang 中的一个包中如果定义了结构体,该结构体的首字母如果小写,那么在其他包中将无法使用该结构体。
如果定义的结构体中名大写,那么其大写的字段可以在另一个包中访问,而其小写的字段则不可以在另一个包中访问。