Go语言基础go接口用法示例详解
作者:枫少文 发布时间:2024-04-30 10:06:53
标签:Go,基础,接口
目录
概述
语法
定义接口
实现接口
空接口
接口的组合
总结
概述
Go 语言中的接口就是方法签名的集合,接口只有声明,没有实现,不包含变量。
语法
定义接口
type [接口名] interface {
方法名1(参数列表) 返回值列表
方法名2(参数列表) 返回值列表
...
}
例子
type Isay interface{
sayHi()
}
实现接口
例子
//定义接口的实现类
type Chinese struct{}
//实现接口
func (_ *Chinese) sayHi() {
fmt.Println("中国人说嗨")
}
//中国人
type Chinese struct{}
//美国人
type Americans struct{}
func (this *Chinese) sayHi() {
fmt.Println("中国人说嗨")
}
func (this Americans) sayHi() {
fmt.Println("美国人说hi")
}
//调用
&Chinese{}.sayHi()
Americans{}.sayHi()
空接口
在Go语言中,所有其它数据类型都实现了空接口。
interface{}
var v1 interface{} = 1
var v2 interface{} = "abc"
var v3 interface{} = struct{ X int }{1}
如果函数打算接收任何数据类型,则可以将参考声明为interface{}。最典型的例子就是标准库fmt包中的Print和Fprint系列的函数:
func Fprint(w io.Writer, a ...interface{}) (n int, err error)
func Fprintf(w io.Writer, format string, a ...interface{})
func Fprintln(w io.Writer, a ...interface{})
func Print(a ...interface{}) (n int, err error)
func Printf(format string, a ...interface{})
func Println(a ...interface{}) (n int, err error)
接口的组合
一个接口中包含一个或多个接口
//说话
type Isay interface{
sayHi()
}
//工作
type Iwork interface{
work()
}
//定义一个接口,组合了上述两个接口
type IPersion interface{
Isay
Iwork
}
type Chinese struct{}
func (_ Chinese) sayHi() {
fmt.Println("中国人说中国话")
}
func (_ Chinese) work() {
fmt.Println("中国人在田里工作")
}
//上述接口等价于:
type IPersion2 interface {
sayHi()
work()
}
package main
import "fmt"
//中国话
type Isay interface {
sayHi()
}
//工作
type Iwork interface {
work()
}
//中国人
type Chinese struct{}
//美国人
type Americans struct{}
func (this *Chinese) sayHi() {
fmt.Println("中国人说嗨")
}
func (this Americans) sayHi() {
fmt.Println("美国人说hi")
}
type IPersion interface {
Isay
Iwork
}
func (_ Chinese) work() {
fmt.Println("中国人在田里工作")
}
func main() {
var chinese Isay = &Chinese{}
chinese.sayHi()
Americans{}.sayHi()
//接口组合
var ipersion IPersion = &Chinese{}
ipersion.sayHi()
ipersion.work()
}
来源:https://blog.csdn.net/guofeng93/article/details/92675978


猜你喜欢
- 前言本文的主要内容是使用 cpu 版本的 tensorflor-2.1 完成对 Auto MPG 数据集的回归预测任务。获取 Auto MP
- WordPress 本身以及主题和插件通常需要加载一些 JavaScript 来实现某些特殊功能。为了最大限度地保证兼容性,不至于出现 Ja
- 方案概要: 1. 改变文件存储时的文件名 2. 配置索引服务器,并将索引服务器与MS SQL Server关联。 3. 修改SQL语句,将进
- 上一篇文章讲解了如何实现马丁策略,但没有探索其泛化能力,所以这次来尝试回测3000只股票来查看盈利比例。批量爬取股票数据这里爬取数据继续使用
- 反射的优点它的核心本质其实就是基于字符串的事件驱动,通过字符串的形式去操作对象的属性或者方法一个概念被提出来,就是要明白它的优点有哪些,这样
- 最近网上流行着一些采集程序,更多人拿着这些东西在网上叫卖,很多不太懂的人看着那些程序眼羡,其实如果你懂一些ASP,了解自动采集程序的原理后,
- 一维插值插值不同于拟合。插值函数经过样本点,拟合函数一般基于最小二乘法尽量靠近所有样本点穿过。常见插值方法有拉格朗日插值法、分段插值法、样条
- 1.首先通过控制面板应用卸载当前环境下的Node.js相关安装,并清理磁盘残存的文件夹等文件2.下载nvm来管理node版本 &
- 一、TensorFlow变量管理1. TensorFLow还提供了tf.get_variable函数来创建或者获取变量,tf.variabl
- 前言做一个简单的日志数据库功能不需要特别繁琐主要就是记录普通日志和错误日志(INFO,ERROR)用数据库作为日志有好处也有坏处相比于文本来
- 视频本教程的视频碰撞是怎么回事在上一次教程中,我们添加了图形,将精灵从普通矩形更改为更漂亮的PNG图像。然而,这带来了一个问题:有时游戏会认
- 前言pandas处理时间的对象有很多,分别表示不同的作用。本次介绍固定时间对象和时间长对象。还是先导入包:import numpy as n
- 和YSlow一样,“Page Speed”也是一个基于firebug附加组件的FireFox插件。虽然听起来有点拗口,但是意思很容易理解:如
- 每位SQL Server开发员都有自己的首选操作方法。我的方法叫做分子查询。这些是由原子查询组合起来的查询,通过它们我可以处理一个表格。将原
- 问题当浏览SQL Server 2008的新特性时,我们看到了透明数据加密。这看起来很有趣。您能为我们解释一下并介绍下执行它的细节吗?专家解
- 实现方法分位三步:在template中设置2个按钮,通过v-if ,v-show来控制;data中设置按钮的默认值;methods中控制点击
- 这里我们应用之前一篇写过的弹框效果,单选框我们运用伪元素自定义,不使用图片, 这个例子可以运用到很多情况;知识点:1、理解wx:if作用2、
- 首先要明确,python里有json这个库,但并没有json这个类,所以所谓的json对象本质上就是一个dict;而json这个库,用于实现
- 简介你手中的这本《JavaScript王者归来》不仅是一本传播知识的书,更是一本求道的书。本书分为五个部分循序渐进地与读者讨论了JavaSc
- scratch-blocks是scratch-gui依赖的一个基本模块。它的作用是生成gui界面上的blocks。(有关scratch-bl