go语言结构体教程 go 结构体实现接口( 二 )


基于channels发送消息有两个重要方面:发了消息、发了什么消息 。一个强调了通讯的发生,一个强调了通讯的内容 。当我们更希望强调通讯发生的时刻时 , 我们将它称为 消息事件。有些消息事件并不携带额外的信息,它仅仅是用作两个goroutine之间的同步 , 这时候我们可以用 struct{} 空结构体作为channels元素的类型 。用来通知子协程(goroutine)执行任务,或只用来控制协程并发度 。
在部分场景下,结构体只包含方法,不包含任何的字段 。这时候我们就可以使用空结构体 。
其实,上面的calculateInt 可以是任何类型,如 type calculateInt bool  , 但是struct{}不占用任何空间,逻辑上也更合理,因此还是它最好 。
go中的structgo和其他语言一样 , 可以申明新的“结构体”,struct可以作为其他类型的属性活字段的容器,定义方式如下:
type 关键字申明person为struct 类型,person包含 name 属性和 age 属性,对应的类型为 string 和 int。我们看看如何使用struct:
除了上面使用的方式使用 struct ,还有三种方式可以使用申明struct类型
完整是使用struct 例子
当我们创建结构体时,字段可以只有类型,而没有字段名 。这样的字段称为匿名字段(Anonymous Field) 。习惯上匿名字段叫内嵌 , 具名字段叫组合
上面我们申明了两个结构体 Student 和 Person ,其中 Student 组合了 Person 字段,那么 Student包含了Person 中的所有字段
从上面的例子可以看出来 , struct 不仅可以将struct作为匿名字段,自定义类型、内置类型都可以作为匿名字段 , 也可以进行相应的函数操作 。
这里我们有个问题,Person上有一个name属性,如果Student上也有一个name属性,那么我们怎么办呢?其实在go里面,最外层的属性具有有限的访问权限,当你通过Student.name访问的时候是访问Student上的属性 。同理,我们可以通过Student.Person访问Person上的属性,如:
如果结构体的全部成员都是可以比较的,那么结构体也是可以比较的,那样的话两个结构体将可以使用 == 或 != 运算符进行比较,但不支持或。
关于go语言结构体教程和go 结构体实现接口的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

推荐阅读