golang中的接口
CSDN找的一个网页,照着抄练一次。
差不多的使用场景都在了。
package main import ( "fmt" ) type People interface { ReturnName() string } type Role interface { People ReturnRole() string } type Student struct { Name string } type Teacher struct { Name string } func (s Student) ReturnName() string { return s.Name } func (t *Teacher) ReturnName() string { return t.Name } func (s Student) ReturnRole() string { return "student" } func CheckPeople(test interface{}) { if _, ok := test.(People); ok { fmt.Println("Student implements People") } } func main() { cbs := Student{Name: "This is a student."} sss := Teacher{Name: "This is a teacher."} CheckPeople(cbs) var a People var b Role a = cbs name := a.ReturnName() fmt.Println(name) a = &sss name = a.ReturnName() fmt.Println(name) b = cbs role := b.ReturnRole() fmt.Println(role) Params := make([]interface{}, 3) Params[0] = 88 Params[1] = "This is a string" Params[2] = Student{Name: "cbs"} for index, v := range Params { if _, ok := v.(int); ok { fmt.Printf("Params[%d] is int type\n", index) } else if _, ok := v.(string); ok { fmt.Printf("Params[%d] is string type\n", index) } else if _, ok := v.(Student); ok { fmt.Printf("Params[%d] is custom Student type\n", index) } else { fmt.Printf("list[%d] unknown type.\n", index) } } for index, v := range Params { switch value := v.(type) { case int: fmt.Printf("Params[%d] is int type: %d\n", index, value) case string: fmt.Printf("Params[%d] is string type: %s\n", index, value) case Student: fmt.Printf("Params[%d] is custom Student type: %s\n", index, value) default: fmt.Printf("list[%d] unknown type.\n", index) } } }
输出:
D:/go-project/src/InterfaceGo/InterfaceGo.exe [D:/go-project/src/InterfaceGo] Student implements People This is a student. This is a teacher. student Params[0] is int type Params[1] is string type Params[2] is custom Student type Params[0] is int type: 88 Params[1] is string type: This is a string Params[2] is custom Student type: {cbs} 成功: 进程退出代码 0.
golang中的接口的更多相关文章
- golang中的接口实现(一)
golang中的接口实现 // 定义一个接口 type People interface { getAge() int // 定义抽象方法1 getName() string // 定义抽象方法2 } ...
- golang中的接口值
package main import ( "bytes" "fmt" "io" ) // 此处的w参数默认是一个空接口,当传递进来buf参 ...
- golang中的接口实现(二)
指针类型 vs 值类型实现接口 package main import ( "fmt" ) // 定义接口 type Describer interface { Describe( ...
- 七、golang中接口、反射
一.接口定义 1.定义 interface类型可以定义一组方法,但是这些不需要实现,并且interface不能包含任何变量 package main import ( "fmt" ...
- golang中接口interface和struct结构类的分析
再golang中,我们要充分理解interface和struct这两种数据类型.为此,我们需要优先理解type的作用. type是golang语言中定义数据类型的唯一关键字.对于type中的匿名成员和 ...
- 六、golang中的结构体和方法、接口
结构体: 1.用来自定义复杂数据结构 2.struct里面可以包含多个字段(属性) 3.struct类型可以定义方法,注意和函数的区分 4.strucr类型是值类型 5.struct类型可以嵌套 6. ...
- Golang 中的 面向对象: 方法, 类, 方法继承, 接口, 多态的简单描述与实现
前言: Golang 相似与C语言, 基础语法与C基本一致,除了广受争议的 左花括号 必须与代码同行的问题, 别的基本差不多; 学会了C, 基本上万变不离其宗, 现在的高级语言身上都能看到C的影子; ...
- Golang中Struct与DB中表字段通过反射自动映射 - sqlmapper
Golang中操作数据库已经有现成的库"database/sql"可以用,但是"database/sql"只提供了最基础的操作接口: 对数据库中一张表的增删改查 ...
- golang中发送http请求的几种常见情况
整理一下golang中各种http的发送方式 方式一 使用http.Newrequest 先生成http.client -> 再生成 http.request -> 之后提交请求:clie ...
随机推荐
- 基于C# 调用百度AI 人脸识别
一.设置 登录百度云控制台,添加应用-添加人脸识别,查找,对比等. 记住API Key和Secret Key 二.创建Demo程序 1.使用Nuget安装 Baidu.AI 和 Newtonsoft. ...
- 安装HomeBrew 失败的解决方案(Error: Fetching /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core failed!)
在安装HomeBrew(或者安装成功 执行相关指令)时遇到错误提示: Error: Failure while executing: git clone https://github.com/Home ...
- dd 工具使用; SSD 顺序写性能测试;
dd 工具使用: dd 也是我们经常使用到的磁盘测试工具,Linux服务器装好系统之后,想要知道硬盘的读写是否能满足服务的需要,如果不满足硬盘的IO就是服务的一个瓶颈.我们可以使用dd命令简单进行测试 ...
- Python-1-Day
C = float(input("Enter a degree in Celsius:"))F = (9/5) * C + 32print("{0} Celsius is ...
- Ubuntu下Xilinx Linux内核编译问题,出现“缺少ncurses”libraries
对官方提供的内核源码包进行解压缩,进入到内核目录,使用make menuconfig后,发现提示以下错误: *** Unable to find the ncurses libraries or th ...
- npm --save-dev 和 --save 的区别
转载 >>> 1. npm install 在安装 npm 包时,有两种命令参数可以把它们的信息写入 package.json 文件, 一个是npm install--save ...
- qt用于图片显示的窗口
用于图片显示的窗口 国产化
- acwing 167. 木棒
乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位. 然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度. 请你设计一个程序,帮助乔 ...
- C++ class内类型重载,operator Type()
#include <iostream> // operator Type() 类型操作符重载 // operator int() // operator double() // ... / ...
- 2019年最新50道java基础部分面试题(三)
前21题请看之前的随笔 22.面向对象的特征有哪些方面 计算机软件系统是现实生活中的业务在计算机中的映射,而现实生活中的业务其实就是一个个对象协作的过程.面向对象编程就是按现实业务一样的方式将程序代码 ...