分享
  1. 首页
  2. 文章

go 速学 - 11 - 结构

mrseasons · · 2754 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

目录

摘要

定义结构,使用结构,值传递与指针传递,匿名结构,结构的组合

结构

概念

  • Go 中没有 class 的概念,结构可以完成类似功能
  • 支持指向自身的指针类型成员
  • 支持匿名结构
  • 支持 ==!= 运算符

创建结构

格式

type <Name> struct{}

type person struct {
 name string
 age int
}

使用结构

结构变量的各个字段都会有默认值

p1 := person{name: "Jack"}
p1.name = "Peter" //p1 {Peter 0}

值传递

参数中的结构默认为值传递

p2 := person{name: "Jack", age: 20}
changeAge(p2)
func changeAge(p person) {
 p.age = 99
 fmt.Println(p) //{Jack 99}
}
fmt.Println("p2", p2) //p2 {Jack 20}

可以通过使用指针改变原来的值

p2 := person{name: "Jack", age: 20}
changeAge(p2)
func changeAge2(p *person) {
 p.age = 99
 fmt.Println(p) //&{Jack 99}
}
fmt.Println("p2", p2) //p2 {Jack 99}

也可以在定义时直接使用指针

p3 := &person{name: "Andy"}

匿名结构

创建匿名结构

p4 := struct {
 name string
 age int
}

也可以在定义时直接进行初始化,但是初始化的最后不能少掉逗号

p4 := struct {
 name string
 age int
}{
 name: "Joe",
 age:  20, //不能少逗号
}

结构中也可以包括匿名结构

type person struct {
 name string
 age int
 //匿名结构
 address struct {
 street string
 }
}

结构的组合

概念

由于 Go 没有类和继承的概念,所以要实现类似功能,需要使用组合,即一个结构中包含另一个结构的变量

定义一个组合

type person struct {
 name string
 age int
}
type student struct {
 name string
 no int
 person
}

以上在 student 结构中组合了一个 person 结构,默认 student 会产生一个与此结构相同的成员,且组合的成员会直接添加到外部结构中。

使用组合

stu := student{name: "Andy", no: 20, person: person{name: "Tony", age: 20}}
stu.person.age = 21
stu.age = 22
fmt.Println(stu) //{Andy 20 {Tony 22 }}
stu.name = "A"
stu.person.name = "B"
fmt.Println(stu) //{A 20 {B 22 {}}}

以上 stu.person.agestu.age 实际操作的是同一变量,而 stu.person.namestu.name 则为不同变量。

即,外部结构不具备内部结构的某一成员时,外部结构直接使用该成员实际使用的是内部结构的成员。
当外部结构和内部结构有同名的成员时,外部结构使用的外部结构的成员,内部结构使用的是内部结构的成员。


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:mrseasons

查看原文:go 速学 - 11 - 结构

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
2754 次点击
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏