Go 结构体,定义结构体类型,struct
demo.go(定义结构体类型):
package main
import "fmt"
// 定义结构体类型 (在函数外部定义(全局的),可以在整个项目中使用)
type student struct {
id int // 结构体的成员
name string
age int
}
func main() {
// 定义结构体变量 (结构体是一种复合类型)
var stu student
// 为结构体成员赋值
stu.id = 1 // 默认0 (int)
stu.name = "张三" // 默认空串 (string)
stu.age = 20
fmt.Println(stu) // {1 张三 20} 按结构体定义时的成员顺序进行显示。
// 定义结构体变量并赋值 (第二种方式)
var stu2 = student{2,"李四",21} // 按结构体定义时的成员顺序进行赋值
fmt.Println(stu2) // {2 李四 21}
// 定义结构体变量并赋值 (第三种方式)
// stu3 := student{3, "王五", 22} // 按结构体定义时的成员顺序进行赋值
stu3 := student{name:"王五", id:3}
fmt.Println(stu3) // {3 王五 0}
// 结构体的地址
fmt.Printf("%p \n", &stu) // 0xc000004460
fmt.Printf("%p \n", &stu.id) // 0xc000004460 整个结构体的地址就是第一个成员的地址
// 结构体成员在内存中按照定义时的成员顺序进行连续存储。
// 结构体的比较
stu4 := stu3
// 结构体stu3与stu4的地址并不相同,修改其中一个并不会影响另一个。 (结构体作为函数参数是值传递,修改形参不会影响实参)
fmt.Printf("%p \n", &stu3) // 0xc000046480
fmt.Printf("%p \n", &stu4) // 0xc0000464c0
fmt.Println(stu3 == stu4) // true 结构体中的所有成员都相同时两个结构体才相等。 (只支持==和!=的比较)
}
还没有评论,来说两句吧...