结构体--Go语言学习笔记

结构体–Go语言学习笔记

结构体:是由一系列具有相同类型或不同类型的数据构成的数据集合,结构体成员是由一系列的成员变量构成,这些成员变量也被称为“字段”。

定义结构体
type Person struct{
    name string
    age int
    sex string
    address string
}
结构体的初始化

方法一:

func main(){
    var p1 Person
    fmt.Println(p1)//{ 0  }
    p1.name="王二狗"
    p1.age=30
    p1.sex="男"
    p1.address="北京市"
    fmt.Println(p1)//{王二狗 30 男 北京市}
}

方法二:

p2:=Person{}
p2.name="Rubby"
p2.age=28
p2.sex="女"
p2.address="上海市"
fmt.Println(p2)//{Rubby 28 女 上海市}

方法三:

p3:=Person{
    name:"如花"
    age:40
    sex:"女"
    address:"武汉市"
}
fmt.Println(p3)//{如花 40 女 武汉市}

方法四:

p4:=Person{"李小花"25"女","address"}

结构体是值类型数据

结构体指针
var pp1 *Person
pp1=&p1
fmt.Println(pp1)
fmt.Printf("&p,%T\n",pp1,pp1)//pp1地址,*main.Person--pp1的数据类型
fmt.Println(*pp1)//{王二狗 30 男 北京市}
pp1.name="王五"
fmt.Println(pp1)//&{王二狗 30 男 北京市}
fmt.Println(p1)//{王二狗 30 男 北京市}
使用内置函数new(),go语言中专门用来创建某种类型的指针的函数
pp2:=new(Person)
fmt.Printf("%T\n",pp2)//*main.Person
//(*pp2).name=..
pp2.name="Jerry"
pp2.age=20
pp2.sex="男"
pp2.address="上海市"
fmt.Println(pp2)//&{Jerry 20 男 上海市}

new()创建各种数据类型的指针,不是nil,不是空指针,存储的是零值

pp3:=new(int)
fmt.Println(pp3)//地址值
fmt.Println(*pp3)//0
匿名结构体

变量名:=struct{

定义字段Field

}{

字段进行赋值

}

s2:=struct{  //赋值变量
    name string  //自定义结构体
    age int
}{
    name:"李四"  //结构体初始化
    age:19
}
fmt.Println(s2.name,s2.age)//李四,19
匿名字段–将数据类型作为字段名称,所以每个数据只能有一个
type Worker struct{
    string//匿名字段
    age
}
func main(){
    s1:=worker{"李小花",21}
    fmt.Println(s1)//{李小花,21}
}
提升字段

结构体1中的一个匿名字段是一个结构体2,结构体2的字段就是结构体1的提升字段。好处是:结构体1可以直接访问结构2的字段或者说属性。

type Person{
    name string
    age int
}
type Student{
    Person
    school string
}
func main(){
    var s1 student
    s1.Person.name="王五"
    s1.Person.age=19
    s1.school="北京大学"
    
    s1.name="孙武"//直接赋值,不用.Person.name=..
    s1.age=34
    s1.school="春秋"
}
结构体嵌套
type Address struct{
    city,state string
}
type Person struct{
    name string
    age int
    address Address
}
func main(){
    var p Person
    p.name="Naveen"
    p.age=50
    p.address=Address{
        city:"chicago",
        state:"Illinois",
    }
    fmt.Println("Name:",p.name)
    fmt.Println("Age:",p.age)
    fmt.Println("City:",p.address.city)
    fmt.Println("state:",p.address.state)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值