1.结构体定义
- 结构体是由相同或不同类型的数据构成的数据集合
- 格式:type 结构体名称 struct{xxx}
//定义结构体
type User struct{
name string
sex string
age int
}
func main() {
//创建对象方式一
var u User
fmt.Println(u) //结构体中的变量未赋值,值为数据类型的默认值
//给结构体对象赋值
u.name="张三"
u.sex="男"
u.age=18
fmt.Println(u) //{张三 男 18}
fmt.Println(u.name) //获取name的值
//创建对象方式二
u1:=User{}
u1.name="李四"
u1.sex="男"
u1.age=20
fmt.Println(u1) //{李四 男 20}
fmt.Println(u1.name) //获取name的值
//创建对象方式三
u2:=User{
name: "小丽",
sex: "女",
age: 19,
}
fmt.Println(u2) //{小丽 女 19}
fmt.Println(u2.name) //获取name的值
//创建对象方式四,不声明属性,参数需要一一对应
u3:=User{"王五","男",25}
fmt.Println(u3) //{王五 男 25}
fmt.Println(u3.name) //获取name的值
}
2.结构体指针
//定义结构体
type User struct{
name string
sex string
age int
}
func main() {
var u User
u.name="张三"
u.sex="男"
u.age=18
var u1_ptr *User //定义结构体指针
u1_ptr = &u
u1_ptr.name="李四" //通过指针修改属性值
fmt.Println(u.name) //李四
}
3.匿名结构体
- 没有名称的结构体,可以直接在函数内部创建并使用
func main() {
//匿名结构体
s:=struct{
name string
age int
}{
name:"zs",
age: 18,
}
fmt.Println(s.name,s.age)
}
4.结构体嵌套
- 结构体中又有结构体
//定义结构体
type User struct{
name string
sex string
age int
add Address //用结构体作为属性
}
type Address struct{
city,state string
}
func main() {
var u User
u.name="zs"
u.age=18
u.add=Address{
city: "广州",
state: "中国",
}
fmt.Println(u.name)
fmt.Println(u.age)
fmt.Println(u.add.state+ u.add.city)
}
5.结构体访问权限
1.结构体中的名称,如果首字母大写,为公共的,所有地方都可以使用,
2.结构体中的名称,如果首字母小写,为私有的,只有自己可以使用