Golang基础--09--接口interface

linux 部署配置ntp server 部署配置ntp server基本概念为什么要用NTPNTP的层次结构安装配置NTP公网ntp内网ntpclient 配置ntpq 的输出NTP配置文件(ntp.config)的一些说明ntpd、ntpdate的区别 基本概念 网络时间协议(NTP)用来同步网络上不同主机的系统时钟。所有受管理的主机可以与一台名为NTP服务器的指定时间服务器同步时间。另一方面,NTP服务器则与任何公共NTP服务器或者你所选择的任何服务器同步自己的时间。所有NTP管理的设备其系统时间同步时可以精确到毫秒级。 为什么要用NTP 阅读详情

目录

接口的定义和基本操作

type USB interface{
    Name() string
    Connect()
}
type PhoneConnecter struct{
    name string
}
func (pc PhoneConnecter) Name() string {
    return pc.name
}
func (pc PhoneConnecter) Connect() {
    fmt.Println("connect:",pc.name)
}
func main(){
    a := PhoneConnecter{"PhoneConnecter"}
    a.Connect()
    Disconnect(a)
}
func Disconnect(usb USB){
    fmt.Println("Disconnect.")
}
/*
> Output:
connect: PhoneConnecter
Disconnect.
*/
  • 接口是一个或者多个接口声明的集合
  • 只要某个类型拥有该接口的所有方法声明,即算实现该接口,无需显示声明实现了哪个接口,这称为structural typing
  • 接口只有方法声明,没有实现,没有数据字段

嵌入接口

  • 接口可以匿名嵌入其他接口,或嵌入到结构中
type USB interface{
    Name() string
    Connecter
}
type Connecter interface {
    Connect()
}

类型断言

...
...
func Disconnect(usb USB){
    //简单的类型断言
    if pc,ok := usb.(PhoneConnecter);ok {
        fmt.Println("Disconnect:",pc.name)
        return
    }
    fmt.Println("Unknown device.")
}
/*
> Output:
command-line-arguments
connect: PhoneConnecter
Disconnect: PhoneConnecter
*/

空接口与type switch

  • 空接口可以作为任何类型数据的容器
  • 任何结构都可以看做是实现了空接口
func Disconnect(usb interface{}){}

type switch

  • 通过类型断言的ok pattern可以判断接口中的数据类型
  • 使用type switch 则可以针对空接口进行比较全面的类型判断
func Disconnect(usb interface{}){
    //type switch,让系统自己判断类型,然后赋值给type
    //一般是参数是空接口的时候用
    switch v := usb.(type){
    case PhoneConnecter:
        fmt.Println("Disconnect:",v.name)
    default:
        fmt.Println("Unknown device.")
    }
}

接口转换

  • 可以将拥有超集的接口转换为子集的接口
type USB interface{
    Name() string
    Connecter
}
type Connecter interface {
    Connect()
}
type PhoneConnecter struct{
    name string
}
func (pc PhoneConnecter) Name() string {
    return pc.name
}
func (pc PhoneConnecter) Connect() {
    fmt.Println("connect:",pc.name)
}
func main(){
    pc := PhoneConnecter{"PhoneConnecter"}
    var a Connecter
    a = Connecter(pc)
    a.Connect()
}
/*
> Output:
command-line-arguments
connect: PhoneConnecter
*/
  • 接口转换的时候只能降级转换

接口使用注意事项

  • 将对象赋值给接口时,会发生拷贝,而接口内部存储的是指向这个复制品的指针,修改对象既无法修改复制品的状态,也无法获取指针
  • 只有当接口存储的类型和对象都为nil时,接口才等于nil
func main(){
    var a interface{}
    fmt.Println(a==nil)

    var p *int =nil
    a=p
    fmt.Println(a==nil)
}
/*
true
false
*/
//第一个是nil
//第二个是存的指向为空的指针,就不是nil了
  • 接口调用不会做receiver的自动转换
  • 接口 同样支持匿名字段方法
  • 接口同样也可实现类似OOP中的多态
最全Go 专栏|接口 interface,Golang高频面试题+解析 本文从鸭子类型引出 Go 的接口,然后用一个例子简单展示了接口类型的用法,接着又介绍了接口赋值,空接口,类型断言和类型查询。相信通过本篇文章大家能对接口有了整体的概念,并掌握了基本用法。文章中的脑图和源码都上传到了 GitHub,有需要的同学可自行下载。Go 专栏文章列表:网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加戳这里获取一个人可以走的很快,但一群人才能走的更远! 阅读详情

相关推荐

2024年Go最新Go 专栏|接口 interface(2),2024年最新微信小程序页面跳转方法总结

/ 输出// cat eat// dog eat。

2401_84905102的博客 2125

在NTP服务器上启用了ntpd服务,显示服务正常运行,但实际上时间同步并没有生效,报错:unsynchronised

问题现象: [root@ntp-server ~]$ ntpstat unsynchronised time server re-starting polling server every 8 s [root@ntp-server ~]$ 解决办法:在配置文件中添加interface listen 后重启ntpd服务 [root@ntp-server ~]$vim /etc/ntp...

李在奋斗的博客 2万+

vuforia-samples-core-unity-6-2-6

高通AR SDK 官方 例子,下载的 vuforia-samples-core-unity-6-2-6 These samples show how to build apps using the following core features of Vuforia. Image Targets VuMark Object Recognition Cylinder Targets Multi Targets User Defined Targets Smart Terrain (Unity only) Cloud Recognition Text Recognition Frame Markers Virtual Buttons

ntp服务配置

ntpd(Network Time Protocol daemon)是 Linux 操作系统的一个守护进程,用于校正本地系统与时钟源服务器之间的时间,完整的实现了 NTP 协议。初始运行 NTP 时,poll 值会比较小,和服务器同步的频率增加,建议尽快调整到正确的时间范围。初始运行 NTP 时,poll 值会比较小,和服务器同步的频率增加,建议尽快调整到正确的时间范围。初始运行 NTP 时,poll 值会比较小,和服务器同步的频率增加,建议尽快调整到正确的时间范围。:remote 远程服务器的级别。

wangjunji34478的专栏 5715

OMI数据获取与可视化:从下载到大气污染分析

本文详细介绍了如何获取与处理OMI卫星数据,以进行大气污染分析。内容涵盖从NASA GES DISC官方源下载对流层NO2数据、使用MATLAB或Python进行月均数据处理与网格化,到利用m_map或cartopy工具进行专业可视化的完整流程。重点解析了数据下载技巧、NetCDF格式处理、地图投影与填色方法,并探讨了时间序列分析与动态可视化等深度应用,为环境研究者提供了一套从数据到洞察的实用指南。

weixin_29210759的博客 269

【现代电路理论】【2】考尔法设计无源单口网络

夏 弥:其实你在冰面上看到鱼浮上来 明年冬天如果你还在那里,那鱼还是会上来换气 那时候你就可以带一把冰镐 把冰面砸开把鱼捞上来熬汤

痛苦的时候装出幸福相,这不是那么难做到的事 2886

centos7 ntp重启后不正常

systemctl restart ntpd.service 提示一下内容 一个步骤解决 vim /etc/ntp.conf 配置里面添加一个:interface listen 本机IP地址 保存后 再重启服务 systemctl restart ntpd.service 稍等3-5分钟即可正常启动。 ...

kyeLeBronJames的博客 1350

3.5.3以太网ETH TC8-PMA物理层测试

英文原版-OA_Automotive_Ethernet_ECU_TestSpecification_Layer_1_100BASE-T1_v3.0.pdf。PMA测试时各个测试项目所进入的测试模式不同,如TX_01对应测试模式1;TX_04对应测试模式5;例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。TX_07对应测试模式5;物理层测试主要分为两部分:IOP测试(包括链接时间,信号质量,线路诊断),PMA测试。

qq_28664971的博客 7696

Golang基础_09-接口interface

目录 目录 接口的定义和基本操作 嵌入接口 类型断言 空接口与type switch type switch 接口转换 接口使用注意事项 目录 @ 接口的定义和基本操作 typ...

150

ABAP内表数据导出Excel:OLE、ALV与GUI_DOWNLOAD方案全解析

在企业级应用开发中,数据导出是连接后台系统与前端业务分析的关键桥梁。其核心原理是将结构化数据转换为通用文件格式,以实现跨平台的数据交换与可视化。从技术价值看,一个健壮的导出功能能显著提升数据处理效率,减少人工干预,是衡量系统实用性的重要指标。常见的应用场景包括报表生成、数据交接和临时数据提取。本文聚焦于SAP ABAP开发领域,深入探讨如何将内表数据高效、稳定地导出至Excel,涵盖了OLE自动化、ALV标准导出以及基于CL_GUI_FRONTEND_SERVICES与GUI_DOWNLOAD的通用方案,并

weixin_32715349的博客 324

盘点天才少年稚晖君彭志辉的知识体系

一个杰出工程师的工作区间和装备

曲折旅程,艰难人生 2万+

GO语言基础-09-接口(interface)

1. 接口概念 1.1 什么是接口 1.2 语法 1.3 接口定义流程说明 2. 完整示例 2.1 定义结构体和方法 定义“武将” 定义“谋士” 2.2 定义接口 2.3 使用接口示例

架构+开发+运维 1148

【DRAM存储器二】Sense Amplifier

详述DRAM颗粒中感应放大器功能、电路结构、工作原理和操作波形

highman110的博客 7201

Go 专栏|接口 interface,Golang端简单易用的SPI框架

本文从鸭子类型引出 Go 的接口,然后用一个例子简单展示了接口类型的用法,接着又介绍了接口赋值,空接口,类型断言和类型查询。相信通过本篇文章大家能对接口有了整体的概念,并掌握了基本用法。文章中的脑图和源码都上传到了 GitHub,有需要的同学可自行下载。开发环境搭建以及开发工具 VS Code 配置变量和常量的声明与赋值基础数据类型:整数、浮点数、复数、布尔值和字符串网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

2401_84301352的博客 988

【Bug已解决】Codex 切换 model_provider 后历史会话消失的解决方案

方案适用场景推荐指数切回原 provider 验证排查的第一步,确认数据是否真的丢失⭐⭐⭐⭐⭐查看本地会话文件进一步确认数据完整性⭐⭐⭐⭐⭐查阅跨 provider 恢复命令官方是否提供了对应功能⭐⭐⭐使用社区辅助工具需要频繁切换 provider 的场景⭐⭐⭐定期备份配置目录任何场景下的通用保险措施⭐⭐⭐⭐切换后历史会话"消失"的本质是客户端的会话列表展示逻辑受当前活跃 provider 状态过滤,而不是原始数据文件被真正删除。

一键难忘的博客 5999

​ISP算法及架构分析介绍

ISP算法及架构分析介绍ISP即Image Signal Processor,是一种图像处理架构,不是我们用的下载器。ISP其实算是图像处理的一个特例,一般应用于前端设备(相对于SENSOR),从结果上看就是将RAW数据转换成压缩后的RGB(一般)数据,供后续CPU使用(识别、压缩等)。市面上很少有直接介绍ISP的书籍或者资料,今天我们主要是聊一聊ISP算法的架构,这样大...

OpenFPGA的博客 5405

golang 接口interface 09

1.接口会自动和拥有相同方法的结构体关联 /* 只要一个变量,含有接口类型中的所有方法,那么这个变量就实现这个接口。 如果一个变量含有了多个interface类型的方法,那么这个变量就实现了多个接口。 */ type MyInterface interface{ GetName() string GetAge() int } type StringInterface interface{ SumAgeSa() int } type CommonInterface interface{ My.

灰猫 267

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Golang中的Interface(接口),全面解析

interface就是字面意思——接口,C++中可以用虚基类表示;Java中就是interface。我们之前在结构体和方法的博文中提到了很多有关于对象和属性的知识点。而interface则使Golang更接近面向对象编程范式的另一个难点interface是方法签名的一个集合,这些方法可以被任一类型通过方法实现。因此接口就是对象行为的申明(不是定义,仅仅表示方法签名,也可以称作函数原型)。💡注意:我多次强调 任一类型 ,Golang中所有类型都可以实现自己的方法,详情见方法。

qq_24428851的博客 1351

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Go 专栏|接口 interface

当调用此函数的时候,可以传入任意类型,只要它实现了就可以。如果没实现,运行过程中会出现错误。Go 语言作为一门静态语言,它通过接口的方式完美支持鸭子类型。

2501_90404736的博客 871

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Go语言 nil和interface详解

golang的nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。nil是预先说明的标识符,也即通常意义上的关键字。在golang中,nil只能赋值给指针、channel、func、interface、map或slice类型的变量。如果未遵循这个规则,则会引发panic。对此官方有明确的说明:http://pkg.golang.org/pkg/builtin/#T

Sunface撩技术 3537

深入 go interface 底层原理

fun 字段则是一个动态大小的函数指针数组,当fun[0]=0时,表示_type并没有实现该接口(这里指的是itab下的_type),当实现了接口时,fun存放了第一个接口方法的地址,其他方法依次往后存放。对于接口判断 == nil 时,只有接口所指向的类型和值都为 nil 时接口才为 nil,如果想比较准确的判断接口类型是否是 nil 可以使用反射实现,但是有一定性能开销。提高代码的灵活性和可维护性:当低层模块的实现发生变化时,高层模块不需要进行大量的修改,只需要更改依赖的抽象的实现即可。

newbietao的博客 1023
上一篇: Golang基础--08--方法method
下一篇: Golang基础--10--反射reflection
ListentTome
博客等级 码龄9年 3粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值