• Calvin
    2021-12-25
    go1.18 增加了 any 关键字,用以替代现在的 interface{} 空接口类型:type any = interface{},实际上是 interface{} 的别名。

    作者回复: 👍

    
    38
  • 罗杰
    2021-12-24
    接口的目的是为了解耦,关于接口在项目还用的非常非常少,几乎没有定义过接口,有点惭愧。

    作者回复: 慢慢来。

    
    14
  • Sid
    2022-01-19
    为什么这里的Type不是Myinterface而是nil呢?

    作者回复: 可以这样理解: i = int64(13) v2, ok := i.(MyInterface) // 由于i的动态类型是int64,所以这行类型断言失败。那么v2虽然静态类型为MyInterface,但其动态类型的值为nil。 而fmt.Printf结合T%输出的是接口类型变量的动态类型的类型信息,所以输出nil。

    共 4 条评论
    12
  • 菠萝吹雪—Code
    2022-08-22 来自北京
    思考题 1、如果 Go 中没有接口类型,会发生什么,会对我们的代码设计产生怎样的影响? (1)代码会产生严重的耦合,系统的扩展性会变低,时间长了代码会变得冗余难以维护 (2)有接口类型可能在代码阅读上产生一定的难度 2、关于尽量定义小接口,你有什么好方法? 随着系统的演进,不断的抽象、提取

    作者回复: 大大的👍

    
    8
  • 邵康
    2022-06-02
    我是一个Java程序员,原来面对不完美的接口可以直接修改接口,然后很容易找到并修改它的实现类,但是go中,遇到需要修改接口时,很难找到它的全部实现类并修改,有什么好办法吗?

    作者回复: 我个人用vim编辑器,目前还没找到什么好插件可以搜索到某个接口的所有实现类型。不知道其他编辑器,比如vscode、goland是否有这类功能。 一个比较粗糙的方法就是:先修改接口,然后编译一遍程序,根据go compiler提供的error信息找到那些实现类型,然后逐一改之(手动允悲)。

    共 4 条评论
    7
  • singularity of sp...
    2022-01-30
    读完了go的接口概念以及接口的实现基于方法集合之后有个问题,就是按老师之前说的go的一大理念就是显式,不支持隐式的转化,但是到了接口这里,相较于java实现对应接口时会直接implement对应的接口的语法而言,个人感觉go接口的实现不免显得过于隐式了,而且接口和实现的分离本身已经是很大程度上的解耦合了,真的有必要像go这样将实现者连实现了谁这样的耦合关系也隐藏起来嘛?

    作者回复: 文中的“隐式”更多是因为接口与Go语言其他部分是正交的关系,建议先看完第30讲。

    
    4
  • Demon.Lee
    2022-07-05
    请假老师一个接口名字的大小写问题:我看 type error intereface{...} 这里用小写字母开头,而 io.Reader 则是 type Reader interface{...} 大写字母开头,我测试了一下,这个大小写并不影响实现,我在 A 包里面定义的接口,在 B 包里面实现对应的方法没有问题(当然,方法是 exported 的)。所以,这个接口名称定义最佳实践是什么,混着用?

    作者回复: error这个接口是特殊的。它是Go预定义的接口,可以不用考虑导出不导出,在哪里都可以使用。 但是我们自定义的接口类型,如果要在包外访问,则必须是头母大写的导出标识符。

    共 2 条评论
    3
  • lesserror
    2021-12-25
    请问一下大白老师,一般错误输出的堆栈中都有类似这样的信息:main.go:20 +0x22d,请问像类似 +0x22d 这样的字符 代表的是什么呢?

    作者回复: 这个值好像是该函数在栈帧(stack frame)中的相对位置。

    
    3
  • AlexWillBeGood
    2021-12-24
    反射和接口还有即将加入的泛型都可以实现抽象,增加了代码的灵活性

    作者回复: 👍。

    
    3
  • Soyoger
    2022-10-14 来自北京
    小接口契约和抽象体现了抽象的一般过程:穷举、归纳、抽象。

    作者回复: 👍

    
    2