首页 > 其他分享 >golang 接口的概念

golang 接口的概念

时间:2023-08-05 18:22:25浏览次数:32  
标签:Get testing 接口 golang 概念 go 充电 retriever Retriever

先上代码

定义一个接口 Retriever

两个接口的实现
infra.go

package main

import (
	"fmt"

	"robot.com/Robot/learngo/testing"
	//"robot.com/Robot/learngo/infra"
)

// ?: Something that can "Get"
type retriever interface {
	Get(string) string
}

func getRetriever() retriever {
	//return infra.Retriever{}
	return testing.Retriever{}
}
func main() {
	var r retriever = getRetriever()
	fmt.Println(r.Get("https://www.imooc.com"))
}

testing.go

package testing

type Retriever struct {
}

func (Retriever) Get(url string) string {
	return "fake content"
}

使用
downloader.go

package main

import (
	"fmt"

	"robot.com/Robot/learngo/testing"
	//"robot.com/Robot/learngo/infra"
)

// ?: Something that can "Get"
type retriever interface {
	Get(string) string
}

func getRetriever() retriever {
	//return infra.Retriever{}
	return testing.Retriever{}
}
func main() {
	var r retriever = getRetriever()
	fmt.Println(r.Get("https://www.imooc.com"))
}

代码说明

在 infra.go和testing.go中,我们定义了Retriever结构体,以及他的成员方法Get

在downloader.go中,如何无缝使用这两个结构体的方法呢?

  • 我们在downloader.go 定义了一个接口retriever,里面定义了一个方法Get,这样我们就可以使用这个接口类型了
  • 定义了getRetriever方法,统一返回Retriever
  • main方法里面,定义var r这个retriever接口类型,我们就可以无缝调用不同模块的Get方法

更有趣的解释

这里拿手机充电,充电的TypeC口,电源|充电宝来类比一下,我们手机没电的时候,需要充电,我们可以用充电宝或者插座来获取到电源,但是如何才能让充电宝的电和插座里的电平滑的充电到手机呢,TypeC的接口有着无可替代的作用,上面的接口就可以类比与这里的接口,无论在哪里,只要我们有电源,无论是插座还是充电宝(Retriever),连接充电线(getRetriever)我们通过这个TypeC接口(retriever)获取到电源。

标签:Get,testing,接口,golang,概念,go,充电,retriever,Retriever
From: https://www.cnblogs.com/zsjlovewm/p/17608371.html

相关文章

  • 深入理解线程与进程:概念、特点与区别,附带代码演示
    当今计算机系统中,线程(Thread)和进程(Process)是并发编程中的关键概念。它们对于提高程序的效率和性能至关重要。本篇博客将详细介绍线程和进程的概念、特点以及它们之间的区别,同时通过代码演示来加深理解。1.线程1.1概念线程是操作系统能够进行运算调度的最小单位。一个进程可以包含......
  • nginx 基本概念
    Nginx基本概念一、什么是Nginx是一款高性能的HTTP服务器和反向代理服务器,同时支持IMAP/POP3/SMTP代理服务。由俄罗斯的程序员伊戈尔·西索夫开发,官网测试能够支撑5万多并发链接,并且CPU、内存等资源消耗却非常低,运行非常稳定。由C语言编写。二、Nginx特点......
  • 深度剖析JAVA 函数式接口
    一、什么是函数式接口:函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导。可以有多个非抽象方法。为了避免别人在这个接口中增加......
  • 网络安全等级保护基本概念
    什么是网络安全等级保护对网络(含信息系统,数据)实施分等级保护,分等级监管,对网络中使用的网络安全产品实行按等级管理,对网络中发生的安全事件分等级响应,处理网络(含信息系统,数据):由计算机或其他信息终端及相关设备组成的,按照一定的规则和程序对信息进行收集、存储、传输、处......
  • 网络接口dhcp失败时会获得一个169.254.x.x的IP地址
    最开始发现这个现象是在windows上面,之前以为是dhcp失败后,会有个随机值作为IP地址,以为是个垃圾数据,是windows特有的行为。最近一个项目,基于buildroot构建,用到4G上网功能,在开发其他功能,一直没插SIM卡,总发现4G接口会拿到一个奇怪的IP地址169.254.118.160。测试把这个问题当作一个bug......
  • 从一道面试题来谈谈Golang中的 ==
    写这篇文章的时候,已经离我找工作有一段时间了,但是觉得这道题不管是面试还是日常的工作中,都会经常遇到,所以还是特意写一篇文章,记录下自己对Golang中==的理解。如文章中出现不对的地方,请不吝赐教,谢谢。注意,以下文章内容是基于go1.16.4进行演示的,如果和你验证时,结果不一致,可能Go......
  • 传奇架设技术传奇引擎BLUEM2引擎中任意魔法接口设置方法
    功能:任意魔法接口.不再限制为几个简单的魔法了.使用此引擎的朋友也可以Diy魔法了示例:目标触发为[@MagTagFuncXXX].当前人物触发为[@MagSelfFuncXXX].XXX为魔法ID.建议做大点.不要太接近现有的魔法ID.;新增魔法ID为248的魔法.鼠标有目标时则触发QFunction-0.txt中的[@MagTagFunc248]......
  • 新概念3册L5笔记(The facts)
    课文课文理解1)Editorsofnewspapersandmagazinesoftengotoextremestoprovidetheirreaderswithunimportantfactsandstatistics.gotoextremestodosth.过分地……,在某方面走极端2)Lastyearajournalisthadbeeninstructedbyawell-knownmagazinetowri......
  • 外键字段的增删改查、多表查询、正反向的概念、子查询、多表查询之连表查询、聚合函数
    外键字段的增删改查多对多的外键增删改查图书和作者是多对多,借助于第三张表实现的,如果想绑定图书和作者的关系,本质上就是在操作第三方表操作第三张表问题:让你给图书添加一个作者,他俩的关系可是多对多让你给图书id=2添加一个作者id=1add方法book_obj=models.Book.objects......
  • CT485modbus协议RS485接口开启合口式电流互感器传感器变送器
    www.daq-iot.com 19936624857—————————————————————————— SC-GP-CT485开口式电流互感器是上海数采物联网科技有限公司推出的一款可以把交流电模拟信号转换成485数字信号的一种电流传感器(互感器),产品内置32位ARM系列MCU和高精度计量芯片,经多点校......