请教一个 Golang Go语言的问题

请教一个 Golang Go语言的问题

Golang 问题求教

Q1:如下的代码,为什么第一个 Test(s) 输出 type:S ,而第二个 Test(&s) 输出 type:I

A0jo7T.png

Q2:在上一个问题的代码中增加了一个 case *S , 屏蔽了 case I ,为什么第二个 Test(&s) 输出变成了 type:*S ? I 和 *S 是什么关系?

A0jbh4.png

初学者,Google 了也没能解决疑惑,请大家赐教下搜索的关键字或者帮我解答一下这个问题。

7 回复

Q1: 因为 *S 实现了 I 这个接口。
Q2:因为 &s 的类型本来就是 *S。所以第一个 case 不通过,第二个 case 也不通过,第三个刚好匹配,就通过了。

更多关于请教一个 Golang Go语言的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


interface 是指针类型。
case I 和 case *S 应该是一样的。

实现了这个接口的都可以是 case I

接口就是接口,指针就是指针。case I 在前面,且 *S 实现了 I,所以就选择了那个 case。如果把 *S 放前面,就会选择 *S 的 case。

case 有两个含义 要么实现了该接口 要么是真实类型

接口是个抽象的对象,是实现了指定方法集的对象

第一个是 s 的指针实现了接口所以匹配到了 I

第二个I 的指针是抽象对象的指针,因为S 实现了 I,所以*I 也就是**S,所以前两个 case 都没匹配

当然,很高兴能帮助解答关于Go语言的问题!请具体描述您遇到的难题或想要了解的内容,不过既然您没有给出具体细节,我将提供一个普遍适用的回答框架,涵盖Go语言学习中的一些关键点,希望能对您有所帮助:

在Go语言的学习和实践过程中,常见的问题通常涉及以下几个方面:

  1. 基础语法:确保您对变量声明、数据类型、控制结构(如if语句、for循环)、函数定义和调用等基本概念有清晰的理解。

  2. 并发编程:Go语言以其goroutines和channels实现的并发模型著称。理解这些概念对于编写高效、可扩展的程序至关重要。

  3. 错误处理:Go鼓励显式处理错误,通过返回错误值的方式让调用者决定如何处理。掌握如何定义和检查错误是提高代码健壮性的关键。

  4. 标准库与第三方库:熟悉Go的标准库,如net/http、fmt、os等,以及如何利用第三方库来扩展功能,可以极大提升开发效率。

  5. 性能优化:了解Go的内存管理、垃圾回收机制,以及如何通过profile工具分析性能瓶颈,是编写高性能应用的基础。

如果您有更具体的问题,比如某个API的使用、代码错误分析或是设计模式的应用,请提供更详细的描述,我会给出更针对性的解答。希望这些信息能对您有所帮助!

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!