golang 接口

2023-11-10

接口

一组method 签名的组合 通过interface 来定义对象的一组行为
interface 就是一组抽象方法的集合

interface 类型

interface 类型定义了一组方法, 如果某个对象实现了某个接口中的方法, 则此对象就实现了此接口

interface 值

如果定义了一个interface 变量, 那么这个变量里面可以存实现这个interface的任意类型的对象。

空interface

interface{} 不包含任何的method
所有的类型都实现了空的interface

空interface 可以用来存储任意类型的值
一个函数把interface{} 作为参数 可以接受任意类型的值作为参数, 如果一个函数返回interface{ 那么也就可以返回任意类型的值

interface 变量存储的类型

interface 变量中国可以存储任意类型对象的数值(前提是实现了 interface)
反过来要想通过这个变量里面 实际保存的是哪个类型的对象呢 ?

  1. 断言 comma-ok 断言

    value, ok = element.(T)
    value 变量的值,ok 是bool 类型, element 是 interface 变量, T 是断言的类型
    如果element 里面确实存储了T 类型的数值, 那么ok 返回true 否则false

package main

	import (
		"fmt"
		"strconv"
	)

	type Element interface{
   }
	type List [] Element

	type Person struct {
   
		name string
		age int
	}

	//定义了String方法,实现了fmt.Stringer
	func (p Person) String() string {
   
		return "(name: " + p.name + " - age: "+strconv.Itoa(p.age)+ " years)"
	}

	func main() {
   
		list := make(List, 3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

golang 接口 的相关文章

  • go踩坑——no required module provides package go.mod file not found in current directory or any parent

    背景 准备运行下面代码 package main import github com gin gonic gin func main 创建一个默认的路由引擎 r gin Default GET 请求方式 hello 请求的路径 当客户端以G
  • Go Web编程实战(6)----反射

    目录 反射 反射的3大原则 接口类型变量 转换为 反射类型对象 反射类型对象 转换为 接口类型变量 反射类型对象 修改 值必 可写的 反射 与其他语言一样 Go语言的反射同样是指 计算机程序在运行时 可以访问 检测和修改它本身状态或行为的一
  • Go语言入门【09】结构体

    结构体 相比于Java 在Go语言中没有类的概念 但是多了结构体 结构体与Java中的类很像 是表示一系列同一类型或不同类型的数据构成的数据集合 例如可以将学生抽象成一个结构体 每一个学生有以下属性 Name 姓名 Age 年龄 Gende
  • Golang-使用 goroutine 运行闭包的“坑”

    介绍 在 Go 语言中 函数支持匿名函数 闭包就是一种特殊的匿名函数 它可以用于访问函数体外部的变量 需要注意的是 在 for range 中 使用 goroutine 执行闭包时 经常会掉 坑 因为匿名函数可以访问函数体外部的变量 而 f
  • go 进阶 go-zero相关: 七. 拦截器与熔断拦截器

    目录 一 拦截器的基础使用 1 服务端拦截器 2 客户端拦截器 二 拦截器底层底层执行原理 三 go zero默认添加的拦截器 客户端 1 熔断器拦截器 BreakerInterceptor 服务端 一 拦截器的基础使用 在go zero
  • 【golang】error parsing regexp: invalid or unsupported Perl syntax (正则表达式校验密码)

    要在 Go 中编写密码校验规则 确保密码不少于8位且包含数字和字母 你可以使用正则表达式和 Go 的 regexp 包来实现 以下是一个示例代码 错误示范 package main import fmt regexp func valida
  • Go Web编程实战(10)----模板引擎库text/template包的使用

    目录 前言 模板引擎 定义模板文件 解析模板文件 渲染模板 实战使用模板 创建 tmpl文件 创建文件用于解析与渲染模板 前言 在Go语言中 模板引擎库text template包主要用于处理任意格式的文本内容 同时还提供了html tem
  • goland环境配置

    goland modules环境配置 下载和安装goland 环境配置 配置环境变量GOPATH 配置go modules GOPROXY代理的系统变量 工程目录中新建三个工作目录 goland中启用go modules 新建一个go程序
  • Go 语言注释教程

    注释是在执行时被忽略的文本 注释可用于解释代码 使其更易读 注释还可用于在测试替代代码时防止代码执行 Go支持单行或多行注释 Go单行注释 单行注释以两个正斜杠 开头 在 和行尾之间的任何文本都将被编译器忽略 不会被执行 示例 This i
  • 为什么最近听说 Go 岗位很少很难?

    大家好 我是煎鱼 其实这个话题已经躺在我的 TODO 里很久了 近来很多社区的小伙伴都私下来交流 也有在朋友圈看到朋友吐槽 Go 上海的大会没什么人 还不如 Rust 大会 比较尴尬 今天主要是看看为什么 Go 岗位看起来近来很难的样子 也
  • Go 程序编译过程(基于 Go1.21)

    版本说明 Go 1 21 官方文档 Go 语言官方文档详细阐述了 Go 语言编译器的具体执行过程 Go1 21 版本可以看这个 https github com golang go tree release branch go1 21 sr
  • 深入理解 Go 语言中的接口(interface)

    一 GoLang 接口的定义 1 GoLang 中的接口 在 Go 语言中接口 interface 是一种类型 一种抽象的类型 接口 interface 定义了一个对象的行为规范 只定义规范不实现 由具体的对象来实现规范的细节 实现接口的条
  • 掌握 Go 语言中的循环结构:从基础到高级

    一 if else 分支结构 1 if 条件判断基本写法 package main import fmt func main score 65 if score gt 90 fmt Println A else if score gt 75
  • 有哪些不错的 Golang 开源项目?

    目前人在字节做 Go 开发 寻找 Golang 开源项目学习目的可能是 想学习或者提高自己对 Go 项目的组织和编排能力 想学习 Go 项目的框架设计 想在一些 Go 语法上细节的优化和进阶 我推荐两个项目 一 tinode 这是一个开源的
  • 【go语言开发】编写单元测试

    本文主要介绍使用go语言编写单元测试用例 首先介绍如何编写单元测试 然后介绍基本命令的使用 最后给出demo示例 文章目录 前言 命令 示例 前言 在go语言中编写单元测试时 使用说明 测试文件命名 在 Go 语言中 测试文件的命名应与被测
  • 【go语言开发】loglus日志框架的使用

    本文将简单介绍loglus框架的基本使用 并给出demo 文章目录 前言 Loglus常见用法 自定义日志级别 使用字段钩子 输出到多个位置 使用钩子实现自定义日志处理 demo
  • go-zero 开发入门-加法客服端示例

    定义 RPC 接口文件 接口文件 add proto 的内容如下 syntax proto3 package add 当 protoc gen go 版本大于 1 4 0 时需加上 go package 否则编译报错 unable to d
  • go-zero开发入门-API网关开发示例

    开发一个 API 网关 代理 https blog csdn net Aquester article details 134856271 中的 RPC 服务 网关完整源代码 file main go package main import
  • 【go语言】error错误机制及自定义错误返回类型

    简介 Go 语言通过内置的 error 接口来处理错误 该接口定义如下 type error interface Error string 这意味着任何实现了 Error 方法的类型都可以作为错误类型 在 Go 中 通常使用 errors
  • Go、Docker、云原生学习笔记全攻略:从零开始,一步步走向精通!(2024版)

    第一章 Go语言学习宝典 一 介绍 01 Go 语言的前生今世 二 开发环境搭建 01 Go 语言开发环境搭建 三 初识GO语言 01 Go 多版本管理工具 02 第一个 Go 程序 hello world 与 main 函数 03 Go

随机推荐

  • java中的实时定时任务管理系统

    java中的实时定时任务管理系统 前言 新增定时任务的线程池配置类 配置ScheduledFuture的包装类 ScheduledFuture是ScheduledExecutorService定时任务线程池的执行结果 实现Runnable接
  • 对象内存分布

    在 JVM 中 对象在内存中分为三块区域 对象头 由Mark Word和Klass Point构成 Mark Word 标记字段 用于存储对象自身的运行时数据 例如存储对象的HashCode 分代年龄 锁标志位等信息 是synchroniz
  • 【小程序】输入框检验姓名、身份证(正则表达式)并提交

    目标 输入绑定姓名 身份证号并进行校验 若未填或校验不通过则显示绑定失败的轻提示 若通过校验并提交则显示绑定成功 使用Vant Weapp gitee io 库 思路与代码 html wx model绑定输入框输入的值 data key是一
  • ThreadLocal深度解析

    简介 在并发编程中 导致并发bug的问题都会归结于对共享变量的操作不当 多个线程同时读写同一共享变量存在并发问题 我们可以利用写时复制 不变性来突破对原数据的写操作 没有写就没有并发问题 而本篇文章所介绍的技术是突破共享变量 没有共享变量也
  • Redis的主从复制和哨兵机制详解

    目录 一 CAP 原理 二 Redis主从同步 1 主从同步是什么能干嘛 2 Redis是如何实现数据同步的 2 1 增量同步 2 2 快照同步 2 3 无盘复制 2 4 通过Wait 指令保证强一致性 3 搭建Redis 1主2从 3 1
  • 解决linux下没有一些windows的头文件问题

    以conio h头文件为例 问题 解决办法 首先想办法找到conio h源文件 网上一般会有 然后随便放到哪个路径 最后以绝对或相对路径的方式添加include 例如 我把文件放在家目录下的share目录下的tool目录 现在我在家目录的s
  • 从第三方系统定时同步数据不全的解决方案

    小Z今天在项目上遇到一个遗留问题 客户的系统需要定时从银行接口获取入账信息 发生了入账数据的丢失 原因是自研系统通过定时任务的方式 每次执行任务只是获取前一天到当前时间的数据 而上个月有段时间银行前置机通信出现异常 所以出现了数据同步不到位
  • STM32CubeIDE学习笔记——搭建环境、编译烧写

    一 搭建环境 1 1 安装JRE 由于 STM32CubeIDE 软件是基于 JAVA 环境运行的 所以需要安装 JRE 才能使用 官网下载 Java Downloads Oracle 1 2 安装STM32CubeIDE 官网下载 STM
  • 大数据毕设 基于大数据的共享单车数据分析与可视化

    文章目录 0 前言 1 课题背景 2 数据清洗 3 数据可视化 热力图 整体特征分布 查看2011 2012间的单车租借情况 天气对于租借数量的影响 湿度与温度对于租借数量的影响 注册用户与未注册用户 4 总结 0 前言 这两年开始毕业设计
  • 判断IP地址有效性

    gt File Name newfile1 cpp gt Author pzz gt Mail 837157806 qq com gt Created Time 2014 2 24 14 06 47 include
  • 嵌入式 Linux 入门(九、Linux 下的磁盘管理)

    嵌入式 Linux 入门第九课 了解 linux 下的磁盘管理 学会挂载移动硬盘设备 矜辰所致 前言 嵌入式 Linux 专栏更新到现在 我们都还没有碰过开发板 本来想着前面的讲完至少先碰一碰开发板 让我们知道我们最终的目的是在开发板上运行
  • vue el-table的每行操作el-button添加单独的loading效果实现

    vue el table的每行操作el button添加单独的loading效果实现 效果图 实现代码 结语 效果图 实现代码
  • grep -v grep使用说明

    目录 一 ps ef 二 grep java 三 grep job 四 grep v grep 五 awk print 2 六 xargs kill 9 当我们要杀掉某个应用服务进程时 一般会执行以下命令 ps ef grep java g
  • 微信小程序getPhoneNumber快速获取用户手机号组件

    小程序中有很多地方都会用到注册用户信息的地方 用户需要填写手机号等 有了这个组件可以快速获取微信绑定手机号码 无须用户填写 1 getPhoneNumber这个组件通过button来实现 别的标签无效 将button中的open type
  • Java复制数组(深拷贝,浅拷贝)

    1 Object clone 简单直接 只能对源数组完整地复制 此方法是深拷贝 也就是如果clone 那么clone 的新数组修改不会影响老数组 但是能使用该方法为基本数据类型加上string String 有final修饰 不可变 基本数
  • 在线安装visual studio时failed signature validation的原因和解决办法

    这两天给笔记本重装了系统 笔记本的系统是windows 8 1 在装visual studio的时候想换个2017试试 就使用在线的方式装了个2017 community 感觉不错 所以准备把开发的虚拟机里面的2015也换成2017 开发虚
  • T1 mapping的用途

    弥漫性反应性纤维化 其特征是心脏中胶原蛋白的不成比例积累 长期以来被认为是舒张功能障碍 心力衰竭和心源性猝死病因的重要因素 因此 心肌间质成为强烈关注的主题 但结构变化的弥散性使得通过使用常规T1加权成像几乎不可能检测到间质纤维化 在过去几
  • 如何看待区块链下的新型共享经济?

    有业内人士认为 区块链技术天然适合大规模协作的一些应用场景 在共享经济当中 不仅涉及的参与主体多 环节复杂 而且要同时协调一个大规模数量的参与者 这是应用区块链技术的一片沃土 区块链对共享经济带来的颠覆性意义已经不言而喻 共享经济的所有参与
  • Android开发之单位详解(dp、sp、px、in、pt、mm)

    开发这么长时间 一直没关注过长度单位的用法 一直都是一根筋的使用者dp sp 后来才发现 除了这两个以外 Android还提供了pt px in mm 开发中看到有很多人不太理解dp sp和px的区别 现在这里介绍一下dp和sp dp也就是
  • golang 接口

    接口 一组method 签名的组合 通过interface 来定义对象的一组行为 interface 就是一组抽象方法的集合 interface 类型 interface 类型定义了一组方法 如果某个对象实现了某个接口中的方法 则此对象就实