设为首页 加入收藏

TOP

Go语言 6 结构体、方法和接口(一)
2018-10-19 15:53:14 】 浏览:311
Tags:语言 结构 方法 接口

 文章由作者马志国在博客园的原创,若转载请于明显处标记出处:http://www.cnblogs.com/mazg/

 

Go学习群:415660935

 

结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合。这些数据称为结构体的成员。Go语言的结构体和其他语言的类有同等的地位,但Go语言放弃了包括继承在内的大量面向对象特性,只保留了组合这个最基础的特性。这也体现了Go语言的简洁性。这章内容主要实现了Go语言的面向对象编程。

6.1.1 结构体定义

定义一个结构体相当于定义了一个新的类型。定义结构体的一般形式:

type 类型名称 struct {

   成员列表

}

   例如,定义一个类型Person

type Person struct {

  name string

  age  int

}

另外需要注意的是,结构体成员的输入顺序也有重要的意义。如果成员的顺序不同,意味着定义了不同的结构体类型。一个命令为S的结构体类型将不能再包含S类型的成员,因为一个聚合的值不能包含它自身(该限制同样适应于数组)但是S类型的结构体可以包含*S指针类型的成员,这可以创建递归的数据结构,例如链表和树结构。如果结构体没有任何成员的话,就是空结构体,写作struct{}.它的大小为0,也不包含任何信息。

6.1.2结构体初始化

结构体变量的的初始化可以按顺序直接初始化,也可以按照字段:值的方式初始化,这种方式的初始化对于字段的初始化的顺序可以是任意的。另外,也可以先定义结构体变量,随后赋值。

p1 := Person{"张三", 20} // 1 按顺序初始化

fmt.Println(p1)

p2 := Person{age: 18, name: "李四"} // 2采用字段:值的方式初始化,可以任意顺序

fmt.Println(p2)

p3 := Person{}// 3 未显示初始化,其成员默认被初始化为零值

fmt.Println(p3)

p3.name = "王五" //给每个成员赋值

p3.age = 19

fmt.Println(p3)

6.1.3 匿名组合实现继承

1 匿名组合的实现

只声明一个成员对应的数据类型而不指明成员的名字,这类成员就叫匿名成员。通过匿名成员实现的匿名组合,可以完成继承的功能。下面定义一个Student类,继承Person类的功能。匿名组合类型相当于以其类型名称(去掉包名部分)作为成员变量的名字。 

 

type Person struct {

    name string

    age  int

}

type Student struct {

    Person

    major string

}

 

func main() {

  s1 := Student{Person{"张三", 18}, "计算机应用"}

  fmt.Println(s1)

  fmt.Println(s1.Person)

  fmt.Println("姓名:", s1.Person.name, "年龄:", s1.Person.age, 

"专业:", s1.major)

  fmt.Println("姓名:", s1.name, "年龄:", s1.age, "专业:", s1.major)

}

//打印结果:

{{张三 18} 计算机应用}

{张三 18}

姓名: 张三 年龄: 18 专业: 计算机应用

姓名: 张三 年龄: 18 专业: 计算机应用

 

 

2匿名组合的重名问题 

以下的示例中,Base1、Base2和Child名称相同。另外,匿名组合中Base2使用了指针类型。

type Base1 struct {

    name string

}

type Base2 struct {

    name string

}

type Child struct {

    Base1

    *Base2

    name string

}

 

func main() {

    c := Child{Base1{"base1"}, &Base2{"base2"}, "child"}

    fmt.Println(c)

    fmt.Println(c.name)

    fmt.Println(c.Base1.name)

    fmt.Println(c.Base2.name)

}

 

//打印结果:

{{base1} 0xc0420082c0 child}

child

base1

base2

6.1.4 匿名结构

func main() {

  a := &struct {

      Name string

      Age  int

 &nbs

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Go语言 3 程序的流程控制 下一篇golang代码文件目录组织、包目录..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目