struct&Method

Posted mcmx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struct&Method相关的知识,希望对你有一定的参考价值。

Go通过类型别名和结构体的形式支持用户自定义类型。
结构体是复合类型。通过new来创建

组成结构体类型的数据称为字段。
type identifier struct
field1 type1
field2 type2
...

在结构体的指针和结构体引用中,调用结构体内的字段都使用选择器(.)就是这个点。。。。叫结构体。。。

混合字面量语法new一个结构体对象
&structa,b,c底层用的还是new()
new(Type)和&Type是等价的。
初始化方法
intr := Interval0, 3 (A)
intr := Intervalend:5, start:1 (B)
intr := Intervalend:5 (C)

Go 语言中,结构体和它所包含的数据在内存中是以连续块的形式存在的,即使结构体中嵌套有其他的结构体

给结构体的字段添加标签:
type Num struct
a int "I am a"
b int "I am b"
c int "I am c"

匿名字段:
只有类型没有字段名(此时类型就是字段名)
type Num struct
a int "I am a"
b int "I am b"
c int "I am c"
int "I ma int"

内嵌结构体
结构体也是一种数据类型,所以它也可以作为一个匿名字段来使用
(继承机制)

当外层结构体和内嵌结构体不冲突时:
内嵌结构体的所有字段和方法都会被继承到外层结构体

当外层结构体和内嵌结构体命名冲突时。
内嵌结构体的字段被隐藏
内嵌结构体的方法被隐藏
但是当字段被隐藏,方法没有重名没有隐藏的话,方法内使用的指针是内嵌结构体对象的字段(就是那个被隐藏的)但是字段没有被隐藏,方法被隐藏的话,调用的字段也是父类的那个字段。(总的来说,方法是谁的就用谁的字段。)

(结构体是一个值类型、不是引用类型,所以传递结构体的时候使用的是拷贝)
方法:(方法是作用在接收者上的一个函数)
接收者必须是对应的结构体类型的引用或者指针。
方法定义
func (a *denseMatrix) Add(b Matrix) Matrix
func (a *sparseMatrix) Add(b Matrix) Matrix

接收者不能是一个接口类型,因为接口是一个抽象定义,所有的东西都是抽象的未完成的。
接收者也不能是一个指针类型。但是可以是任何其它允许类型的指针。
(可以是一个指针,但是不可以是一个指针类型的值)

类型和作用在它上面的方法必须在同一包内定义。


对于struct来说,struct的别名首字母大写表示外部包可以使用,但是字段没有大写则外部包就不能看到,所以,如果要是外部包可以看到字段,也需要大写。方法也是

类型的String()方法,被fmt.print等使用。

以上是关于struct&Method的主要内容,如果未能解决你的问题,请参考以下文章

浅谈Go语言中的结构体struct & 接口Interface & 反射

解决QT:forward declaration of 'struct Ui::xxx';invalid use of incomplete struct &q

struct&&class 空的大小

20160403_联合体的本质和使用 & 与struct的不同 & 大端存储和小端存储

struct&Method

为啥 &mut self 允许借用 struct 成员,但不允许将 self 借用到不可变方法?