golang interface 使用

2023-05-16

interface 是方法签名的集合,interface 类型的值可以存储任何类型变量的值的类型。学到的一个问题,判断 interface 类型的变量不能只判断 value,需要判断 type 和 value

package main

import "fmt"

type sample interface {
	do()
}

type person struct{}

func (*person) do() {}

func getNil() *person {
	return nil
}
func checkNil(p sample) {
	if p == nil {
		fmt.Println("p is nil")
	} else {
		fmt.Println("p is not nil")

	}
}
func main() {
	checkNil(getNil())
}

p is not nil

将 checkNil 里面的判断改为 if reflect.ValueOf(p).IsNil() 使用 IsNil 就可以正确判断
IsNil 函数会对非 struct 类型进行原始数据的 check

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

golang interface 使用 的相关文章

  • 接口除了拥有正确的方法之外还有其他意义吗

    假设我有这个界面 public interface IBox public void setSize int size public int getSize public int getArea and so on 我有一个实现它的类 pu
  • COM接口指南

    我不太喜欢 COM 接口 所以我有一个小问题 假设我有这段代码 Guid 148BD528 A2AB 11CE B11F 00AA00530503 InterfaceType ComInterfaceType InterfaceIsIUnk
  • 为什么我们要实现接口?

    实现接口只是提供方法的骨架 如果我们知道该方法的确切签名行 在这种情况下实现接口有什么要求 这是Interface已经实现的情况 interface IMy void X public class My IMy public void X
  • 在 Java 中显式调用默认方法

    Java 8 引入默认方法 http cr openjdk java net dlsmith jsr335 jsr335 0 6 2 H html提供扩展接口的能力 而无需修改现有的实现 我想知道当该方法已被覆盖或由于不同接口中的默认实现冲
  • TypeScript 函数声明在接口中的区别

    TypeScript 接口中这两种函数声明有什么区别 interface IExample myFunction str string void and interface IExample myFunction str string gt
  • Jersey REST/ JAXB 错误,映射接口

    我必须使用 REST Web 服务中的接口 这是接口 Specs java XmlJavaTypeAdapter MyAdapter class public interface Specs public BaseProperties ge
  • TDD中如何处理接口过度使用?

    我注意到 当我进行 TDD 时 它通常会导致大量的接口 对于具有依赖项的类 它们以通常的方式通过构造函数注入 public class SomeClass public SomeClass IDependencyA first IDepen
  • 与超类和子类构造函数接口

    我在 matlab 文档和之前有关使用 matlab 继承和类构造函数创建接口的问题中找不到帮助 为了使其整洁 放在一个包内 我可以将其压缩如下 而不是拖拽代码 一套 MyPkg有一个超类Super和一些子类Sub1 Sub2 我的大多数属
  • 如何将接口类型传递给过程

    如何将接口类型传递给过程参数 type Hello PortType interface ISoapInvokable 243CBD89 8766 F19D 38DF 427D7A02EAEE function GetDeneme s st
  • 使用Java查找无线网络的SSID

    我们正在做一个用 Java 编码的项目 为 JRE 1 6 编译 需要一些帮助 一个有点但明显复杂的功能 我们希望在连接特定无线网络时执行特定操作 例如当连接的 SSID myNetworkAtHome 或类似名称时 在浏览了这个网站 谷歌
  • 将国际象棋引擎连接到用 Javascript 制作的现有 GUI

    我编写了自己的用于下棋和教授国际象棋的 GUI GUI 是使用 HTML 编写的 用于外观 使用 JavaScript 来实现各个部件的行为 目前该程序不遵循任何国际象棋规则 正确遵循国际象棋规则取决于用户 这允许自由地设置非法位置或多次移
  • 具有不同返回类型的 C# 通用接口

    我有可以返回多种格式数据的网络服务 例如 json 和 xml 我正在针对此 Web 服务构建一个简单的 C api 我希望这些方法能够从 json 原始 json 或原始 xml 返回完全序列化的对象 例如 List
  • Auto-value-gson出现接口错误,注册一个InstanceCreator?

    我有一个如下所示的接口类 public interface Species String name And a Human实现的类 AutoValue使用类型适配器 AutoValue public abstract class Human
  • 为什么这个实现方法看不到它的同级方法? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个实现接口的类 public class SQLiteHHSDBUtils IHHSDBUtils void IHHSDBUtils
  • 您将整个应用程序中使用的常量保存在哪里?

    界面是存储我的信息的可接受的地方吗 public static final Foo bar 您是否推断它们可以从程序外部读取 你给它编了一个超级课吗 当情况出现时 你会怎么做 我会将每个常量放入与其最密切相关的类或接口中 例如 因为它将被其
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder
  • 是否可以使用打字稿映射类型来创建接口的非函数属性类型?

    所以我正在研究 Typescript 的映射类型 是否可以创建一个接口来包装另一种类型 从而从原始类型中删除函数 例如 interface Person name string age number speak void type Data
  • 如何为有时异步的操作创建和实现接口

    假设我有数百个类 它们使用 计算 方法实现公共接口 一些类将执行异步 例如读取文件 而实现相同接口的其他类将执行同步代码 例如将两个数字相加 为了维护和性能 对此进行编码的好方法是什么 到目前为止我读到的帖子总是建议将异步 等待方法冒泡给调
  • TypeScript 接口函数属性:有什么区别?

    有人可以解释一下 为什么在这段代码中 对 Interface 类型常量的赋值有效 但对 Interface 类型常量的赋值会抛出错误 interface InterfaceA doSomething data object boolean
  • 委托和接口如何互换使用?

    我可以使用接口方法代替委托吗 如何 我发现搜索接口方法比使用委托更快 我希望有一个简单的代码片段 理论上 可以通过包含单个方法的接口 例如 Java 没有委托 来完成委托完成的所有工作 然而 它使代码变得更加冗长并且没有带来什么好处 话又说

随机推荐

  • echarts图表分区域--显示不同颜色(markArea)

    项目需要这样的效果 xff0c 在y轴数值大于50的时候 xff0c 向上的区域显示不同的颜色 xff1a 查阅官方文档有一个属性markArea xff0c 是标记背景区域的 xff0c 官方是这样配置的 xff1a 因为我有多个色块 x
  • ChatGPT自我分析

    作者 xff1a chatgpt ChatGPT 是一个由 GPT 技术驱动的聊天机器人 xff0c 它能够回答各种问题 提供信息和建议 生成文本和完成其他任务 ChatGPT 是一个深度学习模型 xff0c 是人工智能技术中的一种 在本博
  • Visutal Studio2022 如何使用Github copilot

    visual studio 2019 升级最新版本的2019也并没有搜索到 xff0c 直接升级到visual studio 2022 xff0c 看发布介绍也是2022的copilot Copilot 是一款由 OpenAI 开发的基于
  • 音视频领域的经典书籍推荐

    数字视频处理基础 xff08 Digital Video Processing xff09 xff1a 作者A Murat Tekalp xff0c 讲述数字视频处理的基本概念和技术 xff0c 包括视频编码 图像分析 视频通信和多媒体系统
  • 音视频专家

    作为一名顶级的音视频专家 xff0c 需要在音视频领域拥有非常深入的技术理解和丰富的实践经验 xff0c 并且要能够在行业内产生深远的影响和贡献 以下是更详细的顶级音视频专家提升计划 xff1a 1 深入研究音视频核心技术 作为顶级音视频专
  • 2022年新兴技术趋势

    图片源自 xff1a 2022年Gartner新兴技术成熟度曲线公布最新技术趋势 Gartner中国 人工智能和机器学习技术仍处于高峰 xff0c 但已经开始进入成熟期 这表明人工智能和机器学习技术已经不再是新颖的概念 xff0c 而是逐渐
  • 白镜1-1

    2029年 xff0c 人类社会已经进入了全球化 数字化 智能化的新时代 xff0c 各国政府和企业已经开始在深海和太空等地方进行勘探和开采 同时 xff0c 在不断提升的科技水平下 xff0c 人类已经开始了向宇宙的探索和移民 在这样一个
  • Jetson查看GPU显存信息

    pip3 install jetson stats jtop 然后运行jtop命令即可 xff0c jetson xavier nx 的查看命令并不是nvidia smi xff0c 所以运行nvidia smi并没有效果 xff01 效果
  • 并不包含调试信息(未加载任何符号)

    今天调试一C 43 43 程序 xff0c 按下F5 xff0c 老是弹出一对话框显示信息 xff1a debugging information for 39 myproject exe 39 cannot be found or doe
  • hdu 1358 Period KMP

    题目大意 xff1a 对于一个字符串 xff0c 找由循环字符串组成的位置 xff0c 并输出最多循环了几次 xff0c 比如两个样例 xff0c 第一个是 aaa xff0c 所以在第二个位置由子串a循环两次得到 xff0c 第三个位置由
  • mysql max_connections 最大连接数,用户数

    设置max connections xff08 这个办法在debian xff0b mysql Ver 12 22 Distrib 4 0 22 for pc linux i386 里实验了 xff09 设置办法是在my cnf文件中 xf
  • dll文件加载运行加载的14001错误,由于应用程序配置不正确,应用程序未能启动

    最近在处理项目问题的的时候发现了这么一个问题 xff0c 就是我们的程序在调用第三方提供的dll文件的时候在一台机器上面会报14001的错误 xff0c 但是在另一台机器上面不会 两台机器上面的操作系统是相同的 针对这个问题和这个错误码 x
  • Python框架下django 的并发和多线程

    django 的并发能力真的是令人担忧 xff0c django本身框架下只有一个线程在处理请求 xff0c 任何一个请求阻塞 xff0c 就会影响另一个情感求的响应 xff0c 尤其是涉及到IO操作时 xff0c 基于框架下开发的视图的响
  • Linux查看电源状态指令

    dmidecode命令可以让你在Linux系统下获取有关硬件方面的信息 dmidecode的作用是将DMI数据库中的信息解码 xff0c 以可读的文本方式显示 由于DMI信息可以人为修改 xff0c 因此里面的信息不一定是系统准确的信息 d
  • HashCode()和equals()的区别

    文章目录 HashCode简介equals简介1 类中重写HashCode和equals方法比较两个对象是否相等2 HashSet保证元素的唯一性 HashCode简介 hashCode 方法的作用是获取哈希码 xff0c 返回的是一个in
  • 远算CAE平台-基于云平台的Hypermesh与Abaqus联合仿真(轴承底座)

    小编在这里展示一个Hypermesh与Abaqus的联合仿真案例 xff1a 本次联合仿真使用Hypermesh进行前处理 xff0c 然后在Abaqus中设置并计算 xff0c 最后使用Hyperview查看结果 1 在Hypermesh
  • ubuntu OPT权限

    首先opt是系统文件夹 xff0c 权限被保护起来了需要一定的权限才可以操作 1 打开终端 输入如下命令 2 sudo chmod 777 opt 然后回车 xff0c 这时候会提示输入管理员密码密码 xff0c 这样opt就可以创建文件了
  • 看这篇就够了——ubuntu系统中的cuda cudnn cudatookit及pytorch使用

    一 基本概念 1 1 nvidia独立显卡 独立显卡是指以独立板卡形式存在 xff0c 可在具备显卡接口的主板上自由插拔的显卡 独立显卡具备单独的显存 xff0c 不占用系统内存 xff0c 而且技术上领先于集成显卡 xff0c 能够提供更
  • 虚拟机中ubuntu系统无法正常连接网络

    网络连接标志不见 xff0c 或者链接状态无 xff0c 或者如下图 解决办法1 xff1a 桥连接模式 桥连接模式就是直接使用物理主机的网络 假设物理主机在局域网中 xff0c IP地址为192 168 20 24 24 xff0c 因此
  • golang interface 使用

    interface 是方法签名的集合 xff0c interface 类型的值可以存储任何类型变量的值的类型 学到的一个问题 xff0c 判断 interface 类型的变量不能只判断 value xff0c 需要判断 type 和 val