Go语言结构体指针的用法
在 Go 语言中,实例化结构体的时候,可以使用内置函数方法 new() 和取地址操作符“&”实现,这两种实例化方法都是由指针方式完成的,在访问成员的时候也是使用实心点,但编译器自动将其转换为 (*yyy).xxx 形式访问。
下面的实例演示了结构体指针的真正使用方法。
最后运行上述代码,运行结果为:
下面的实例演示了结构体指针的真正使用方法。
package main import "fmt" // 定义结构体person type person struct { name string age int } func main() { // 使用new()实例化结构体 var p3 *person = new(person) // 对结构体成员进行赋值操作 (*p3).name = "LiLy" (*p3).age = 28 // 由实例化变量p3访问成员 fmt.Printf("结构体成员name的值:%v\n", p3.name) fmt.Printf("结构体成员age的值:%v\n", p3.age) // 取结构体的地址实例化 var p4 *person = &person{} // 对结构体成员进行赋值操作 (*p4).name = "Mary" (*p4).age = 16 // 由实例化变量p4访问成员 fmt.Printf("结构体成员name的值:%v\n", p4.name) fmt.Printf("结构体成员age的值:%v\n", p4.age) }从上述代码看到,指针方式的实例化过程如下:
- 使用内置函数方法 new() 和取地址操作符“&”实例化结构体的时候,实例化变量都是指针类型,如 var p3 *person 和 var p4 *person;
- 通过变量 p3 或 p4 访问成员的时候,先使用取值操作符“*”从变量存储的内存地址获取结构体,再从结构体取得某个成员,最后对该成员执行取值或赋值操作;
- 指针方式的实例化结构体允许直接使用实心点访问成员,如 p3.name="LiLy",因为编译器自动将其转换为 (*p3).name="LiLy" 形式访问。
最后运行上述代码,运行结果为:
结构体成员name的值:LiLy
结构体成员age的值:28
结构体成员name的值:Mary
结构体成员age的值:16