Golang中Struct && Interface简介

Struct

很多时候,我们需要自定义新的数据类型,C++里可以用class,Golang里面也同样拥有类似的定义,称之为struct。为一个struct类型,也拥有自己的方法,属性。

Method

为struct定义方法也是非常简单的,对比C++,不需要显示的将方法写在class声明里

func (Coder)GetBestAreas() string {
    ...
}

可以按如下的方法进行调用

c := Coder{name:"Li", skills:[]stirng{"C++","Golang"}}
fmt.Println(c.GetBestAreas())

Embedding

Golang里没有提供直接继承某一个struct的方法,但是却可以通过embedding字段(匿名字段)来实现。例如我们有一个Student的struct

type Human struct {
    name string
    sex string
    ...
}

还有一个用来描述程序员的struct:

type Coder struct{
    name string
    sex string
    ...
    skills []string
}

在Human和Coder里重复定义了name和sex字段,那么这时可以通过在Coder里嵌入Human类型来直接使用Human中的字段

type Coder struct {
    Human
    skills []string
}

Interface

如果说struct是一个class,那么他只能定义不含虚函数的方法,而interface确实只能定义纯虚函数,并不能含有任何字段。

type Animal interface {
    Sound() string
}

type Cat struct {
}

func (Cat) Sound() string {
    return "Miao"
}

type Dog struct {
}

func (Dog) Sound() string {
    return "Wang"
}

func main() {
    animals := []Animal{Dog{}, Cat{}}
    for _, animal := range animals {
        fmt.Println(animal.Sound())
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,853评论 18 139
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,758评论 0 9
  • 能力模型 选择题 [primary] 下面属于关键字的是()A. funcB. defC. structD. cl...
    _张晓龙_阅读 24,868评论 14 224
  • 本文可以随意转载,转载请标明作者和来源。 引子 本文题目凸显一个‘怪’字,怪即为奇异,Go语言很多特点和特性可称之...
    任我凌波微步阅读 1,569评论 0 5
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399