golang中的接口

1.简介

  1. 在go中的接口是以一种类型,一种抽象的类型。接口(interface)是一组函数method的集合,go中的接口不能包含任何变量。
  2. 在go中接口中的所有方法都没有方法体,接口定义了一个对象的行为规范,只定义规范不实现。接口体现了程序的多态和高内聚低耦合的思想。
  3. go中的接口也是一种数据类型,不需要显示实现,只需要一个变量含有接口类型中的所有方法,那么这个变量就实现了这个接口。

2.接口的定义 

interface类型可以定义一组方法,但是这些不需要实现。并且interface不能包含任何变量。到某个自定义类型要使用的时候,再根据具体情况把这些方法写出来(实现)。

type 接口名 interface {

method1(参数...)返回值列表

method2(参数...)返回值列表

}

实现:

func (t 自定义类型) method1(参数...)返回值列表{

//方法体

}

func (t 自定义类型) method2(参数...)返回值列表{

//方法体

}

其中:

  • 接口名:使用type将接口定义为自定义类型名,go语言的接口在命名时,一般会在单词后面添加er,如有写操作的接口writer,有字符串功能的接口叫Stringer等。接口名最好能突出该接口的类型含义。
  • method:当方法名首字母是大写且这个接口名首字母也是大写,这个方法可以被接口所在的包(package)之外的代码访问。
  • 参数和返回值列表:参数和返回值列表中的参数名可以省略。

3.快速入门

定义一个Usber接口让Phone和Camera结构体实现这个接口。

package mainimport "fmt"// 定义一个接口
type Usber interface {//声明了两个没有实现的方法start()stop()
}type Phone struct {
}// 手机要实现usb接口的化必须得实现usb接口中的所有方法
func (p Phone) start() {fmt.Println("手机开始工作了")
}
func (p Phone) stop() {fmt.Println("手机停止工作了")
}type Camera struct {
}// 照相机要实现usb接口的化必须得实现usb接口中的所有方法func (p Camera) start() {fmt.Println("照相机开始工作了")
}
func (p Camera) stop() {fmt.Println("照相机停止工作了")
}type Computer struct {
}// 编写一个方法Working,接口一个Usber接口类型的变量
// 只要实现了Usber接口,
func (c Computer) Working(usb Usber) {//通过usb接口变量来调用start和stop方法usb.start()usb.stop(

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/36243.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据采集技术之python网络爬虫(中国天气网的爬取)

一、爬取中国天气网所有地区当天的天气数据(PyCharm): 网址:https://www.weather.com.cn/ 下面爬取数据: 因为现在已经到了夜间,所以白天的数据已经不见了,但原理是一样的。 二、代码以及详情…

实验四 文件管理

实验四 文件管理 实验目的 (一)实验1 1.加深对文件,目录,文件系统等概念的理解。 2.掌握Linux文件系统的目录结构。 3.掌握有关Linux文件系统操作的常用命令。 4.了解有关文件…

一文了解ThreadLocal

什么是ThreadLocal? ThreadLocal是每个线程私有的,线程可以把自己的私有数据放到ThreadLocal里面,不用担心其他线程访问到自己ThreadLocal。 通过set()方法将值存入ThreadLocal或者修改值,get()方法取出值,remove()方…

河南大学数据库实验5

由于版本问题图片无法正常上传,如果word版本需要请私信 1.现有读者购书数据库,该数据库中包含三个表:读者相关信息表R,图书信息表B,读者订购图书表OD,具体情况如下表: 表1 R表 表2 B表 表3 …

利用通义灵码AI在VS Code中快速开发扫雷游戏:Qwen2.5-Max模型的应用实例

引言 随着人工智能技术的不断进步,开发过程中的自动化程度也在逐步提高。阿里云推出的通义灵码AI程序员,作为一款创新型的智能编程助手,现已全面上线并兼容VS Code、JetBrains IDEs等多种开发环境。本文将介绍如何利用最新的Qwen2.5-Max模型…

Java多线程与高并发专题——在 Thread 中多个 ThreadLocal 是怎么存储的?

Thread、 ThreadLocal 及 ThreadLocalMap 三者之间的关系 在解答本文的标题问题之前,先要搞清楚 Thread、 ThreadLocal 及 ThreadLocalMap 三者之间的关系。 首先我们梳理下它们的定义与作用: Thread(线程) 定义:Th…

git tag常用操作

git tag是干嘛用的,相当于一个轻量级的分支。在一个分支上,创建一个tag,就是标记某一次的提交。然后方便checkout到 这个标签上。用tag的意思就是不用专门再创建一个新分支来修改后续的改动。分支不变,继续在上面改动,…

大模型开发(六):LoRA项目——新媒体评论智能分类与信息抽取系统

LoRA项目——新媒体评论智能分类与信息抽取系统 0 前言1 项目介绍1.1 项目功能1.2 技术原理1.3 软硬件环境1.4 项目结构 2 数据介绍与处理2.1 数据集介绍2.2 数据处理2.3 数据导入器 3 模型训练3.1 配置文件3.2 工具函数3.3 模型训练3.4 模型评估 4 模型推理 0 前言 微调里面&…

简单几步完成dify的本地搭建

简单几步完成dify的本地搭建

网络爬虫【爬虫库request】

我叫不三不四,很高兴见到大家,欢迎一起学习交流和进步 今天来讲一讲爬虫 Requests是Python的一个很实用的HTTP客户端库,完全满足如今网络爬虫的需求。与Urllib对比,Requests不仅具备Urllib的全部功能;在开发使用上&…

深度学习:从零开始的DeepSeek-R1-Distill有监督微调训练实战(SFT)

原文链接:从零开始的DeepSeek微调训练实战(SFT) 微调参考示例:由unsloth官方提供https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen2.5_(7B)-Alpaca.ipynbhttps://colab.research.google.com/git…

MySQL 调优

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

Clion远程开发配置

代码开发环境:windows下,基于Clion 2024.3开发,标准为C20 代码运行环境:远程服务器,ubuntu,cmake版本3.12,gcc11.4,g11.4,gdb12.1 实现功能:在本地windows开…

男女搭配(数学思维)

#include <bits/stdc.h> using namespace std; int main() {// 请在此输入您的代码int t;cin>>t;while(t--){int n,m,k;cin>>n>>m>>k;int smin(n,2*m)/2;if(nm-k > 3*s) cout<<s<<endl;else cout<<(nm-k)/3<<endl;}r…

SakuraCat(1)整体架构概述 (完善中)

项目功能概述 支持Servlet组件可部署一个标准的Web App 项目架构总览 HTTP服务器&#xff1a;负责建立链接&#xff0c;处理请求的数据&#xff0c;并转发给Servlet容器。Servlet容器&#xff1a;将HttpServletRequest和HttpServletResponse对象传给对应的业务类进行相应的逻…

一种基于大规模语言模型LLM的数据分析洞察生成方法

从复杂数据库中提取洞察对数据驱动决策至关重要,但传统手动生成洞察的方式耗时耗力,现有自动化数据分析方法生成的洞察不如人工生成的有洞察力,且存在适用场景受限等问题。下文将介绍一种新的方法,通过生成高层次问题和子问题,并使用SQL查询和LLM总结生成多表数据库中的见…

单片机学完开发板,如何继续提升自己的技能?

很多人学完开发板后都会卡在一个尴尬的阶段&#xff1a;觉得自己会的东西不少&#xff0c;但又不知道下一步该干啥。会点C语言&#xff0c;能烧录程序&#xff0c;能点亮LED&#xff0c;玩转按键&#xff0c;搞定串口等等&#xff0c;能用开发板做点小玩意儿&#xff0c;但面对…

计算机网络——总结

01. 网络的发展及体系结构 网络演进历程 从1969年ARPANET的4个节点发展到如今覆盖全球的互联网&#xff0c;网络技术经历了电路交换到分组交换、有线连接到无线覆盖的革命性变革。5G时代的到来使得网络传输速度突破10Gbps&#xff0c;物联网设备数量突破百亿级别。 网络体系…

实验10决策树

实验10决策树 一、实验目的 &#xff08;1&#xff09;理解并熟悉决策树算法思想和原理&#xff1b; &#xff08;2&#xff09;熟悉决策树算法的数学推导过程&#xff1b; &#xff08;3&#xff09;能运用决策树算法解决实际问题并体会算法的效果&#xff1b; &#xff08;4…

【css酷炫效果】纯CSS实现悬浮弹性按钮

【css酷炫效果】纯CSS实现悬浮弹性按钮 缘创作背景html结构css样式完整代码效果图 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;https://download.csdn.net/download/u011561335/90492020 缘 创作随缘&#xff0c;不定时更新。 创作背景 刚看到csdn出活动了&…