跟着google工程师学Go语言(十二):Golang结构体和方法

欢迎来到:Google资深工程师深度讲解Go语言

视频地址:Google资深工程师深度讲解Go语言 -结构体和方法

面向对象
  • go语言仅支持封装,不支持继承和多态
  • go语言没有class,只有struct

结构体是复合类型(composite types),当需要定义一个类型,它由一系列属性组成,每个属性都有自己的类型和值的时候,就应该使用结构体,它把数据聚集在一起。然后可以访问这些数据,就好像它是一个独立实体的一部分。结构体也是值类型,因此可以通过 new 函数来创建。

组成结构体类型的那些数据称为 字段(fields)。每个字段都有一个类型和一个名字;在一个结构体中,字段名字必须是唯一的。

结构体定义的一般方式如下:

type identifier struct {
    field1 type1
    field2 type2
    ...
}

结构体里的字段都有 名字,像 field1、field2 等,如果字段在代码中从来也不会被用到,那么可以命名它为 _。

结构体的字段可以是任何类型,甚至是结构体本身(参考第 10.5 节),也可以是函数或者接口(参考第 11 章)。可以声明结构体类型的一个变量,然后像下面这样给它的字段赋值:

var s T
s.a = 5
s.b = 8

使用 new

使用 new 函数给一个新的结构体变量分配内存,它返回指向已分配内存的指针:

var t *T = new(T)

写这条语句的惯用方法是:t := new(T),变量 t 是一个指向 T的指针,此时结构体字段的值是它们所属类型的零值。

声明 var t T 也会给 t 分配内存,并零值化内存,但是这个时候 t 是类型T。在这两种方式中,t 通常被称做类型 T 的一个实例(instance)或对象(Object)。

可以使用点号符给字段赋值:structname.fieldname = value
同样的,使用点号符可以获取结构体字段的值:structname.fieldname

为结构定义方法:

func (node TreeNode) print(){
    fmt.Println(node.Value)
}

显示定义和命名方法接收者

使用指针组作为方法接收者:

func (node *TreeNode)setValue(value int)  {
    node.value = value
} 

-只有使用指针可以改变结构体内容
-nil指针也可以调用方法
改变内容,结构体过大,一致性 –使用指针接收者


参考文档,Go入门指南:结构体和方法

猜你喜欢

转载自blog.csdn.net/u010363932/article/details/81714058