Golang中的interface,一看就明白

栏目: Go · 发布时间: 7年前

内容简介:先说说接口,接口我理解为一些行为的集合。似乎还是很懵x。来看看代码和允许效果,再说。从结果上看,确实是不同的实例调用的是各自的函数,这个函数和interface中的

Golang中的interface,一看就明白

先说说接口,接口我理解为一些行为的集合。似乎还是很懵x。来看看代码和允许效果,再说。

package main

import "fmt"

type TypeCalculator interface {
    TypeCal() string
}

type Worker struct {
    Type int
    Name string
}

type Student struct {
    Name string
}

func (w Worker) TypeCal() string {
    if w.Type == 0 {
        return w.Name +"是蓝翔毕业的员工"
    } else {
        return w.Name+"不是蓝翔毕业的员工"
    }
}

func (s Student) TypeCal() string  {
    return s.Name + "还在蓝翔学挖掘机炒菜"
}

func main() {
    worker := Worker{Type:0, Name:"小华"}
    student := Student{Name:"小明"}
    workers := []TypeCalculator{worker, student}
    for _, v := range workers {
        fmt.Println(v.TypeCal())
    }
}
//运行效果
//小华是蓝翔毕业的员工
//小明还在蓝翔学挖掘机炒菜

开始解(xia)释(bai)

  1. 首先我们写了一个interface,里面有个待实现的方法TypeCal()
type TypeCalculator interface {
    TypeCal() string
}
  1. 又写了两个结构体Worker和Student
type Worker struct {
    Type int
    Name string
}

type Student struct {
    Name string
}
  1. 分别为他们实现了一个与结构体中同名的函数
func (w Worker) TypeCal() string {
    if w.Type == 0 {
        return w.Name +"是蓝翔毕业的员工"
    } else {
        return w.Name+"不是蓝翔毕业的员工"
    }
}

func (s Student) TypeCal() string  {
    return s.Name + "还在蓝翔学挖掘机炒菜"
}
  1. 分别创建worker和student的实例
worker := Worker{Type:0, Name:"小华"}
student := Student{Name:"小明"}
  1. 来来来,重点来了,把这两个实例放同一个TypeCalculator的切片中
workers := []TypeCalculator{worker, student}
  1. 遍历这个切片,并调用切片中的函数打印结果
for _, v := range workers {
    fmt.Println(v.TypeCal())
}

简单分析

从结果上看,确实是不同的实例调用的是各自的函数,这个函数和interface中的 函数名返回值 是相同的。那么加入要是某个实例没有实现interface中的函数呢?当把Student对应的函数注释掉,然后再运行程序,程序报错如下(用我的散装英语翻译就是,Student 没有实现TypeCalculator,TypeCal这个函数/方法找不到)

Student does not implement TypeCalculator (missing TypeCal method)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Code

Code

Charles Petzold / Microsoft Press / 2000-10-21 / USD 29.99

Paperback Edition What do flashlights, the British invasion, black cats, and seesaws have to do with computers? In CODE, they show us the ingenious ways we manipulate language and invent new means of ......一起来看看 《Code》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具