Go语言包结构体可访问性

Go语言包结构体可访问性教程

Golang 中的一个 中如果定义了 结构体,该结构体的首字母如果小写,那么在其他包中将无法使用该结构体。

如果定义的结构体中名大写,那么其大写的字段可以在另一个包中访问,而其小写的字段则不可以在另一个包中访问。

Golang包结构体可访问性

package package1 type structName struct{ }

我们在包 package1 中定义了一个结构体 structName,因为其首字母是小写的,因此,该结构体只能在包 package1 中使用,在其他包不能访问。

package package1 type StructName struct{ Field1 FieldType Field2 FieldType field3 FieldType }

我们在包 package1 中定义了一个结构体 StructName,因为其首字母是大写的,因此,该结构体可以在其他包中使用。

因为其字段名 Field1Field2 首字母是大写的,因此,这两个字段可以在其他包中访问,而字段 field3 是首字母小写的,因此该字段不可以在其他字段访问。

案例

结构体可访问性

首先,我们在设置的 GOPATH 环境变量对应的路径下的 src 目录下新建一个 haicoder 文件夹,并在 haicoder 文件夹新建一个 info.go 文件,如下图所示:

15_golang包结构体可访问性.png

我们在 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 结构体。程序运行后,控制台输出如下:

16_golang包结构体可访问性.png

我们看到,程序运行报错,因此,我们在 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) }

此时,再次运行程序,输出如下:

17_golang包结构体可访问性.png

我们看到,这次程序没有报错,即我们在 main 包里面成功调用了 haicoder 包里面的首字母大写的结构体。

结构体字段可访问性

首先,我们在设置的 GOPATH 环境变量对应的路径下的 src 目录下新建一个 haicoder 文件夹,并在 haicoder 文件夹新建一个 info.go 文件,如下图所示:

18_golang包结构体可访问性.png

我们在 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 结构体。程序运行后,控制台输出如下:

19_golang包结构体可访问性.png

我们看到,我们正确设置了 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 包里首字母小写的字段,运行后,程序输出如下:

20_golang包结构体可访问性.png

我们看到,这次程序报错,即我们在 main 包调用 haicoder 包里面结构体中的首字母小写的字段,程序报错。

Go语言包结构体可访问性教程总结

在 Golang 中的一个包中如果定义了结构体,该结构体的首字母如果小写,那么在其他包中将无法使用该结构体。

如果定义的结构体中名大写,那么其大写的字段可以在另一个包中访问,而其小写的字段则不可以在另一个包中访问。