
今天面试被问到的,我答不上来,他问的是不是这两种写法的区别?
package main import "fmt" type Dog interface { eat() } type dog struct{} func (d dog) eat() { fmt.Println("dog eat ...") } func dogEat1[T Dog](d T) { d.eat() } func dogEat2(d Dog) { d.eat() } func main() { d := dog{} dogEat1(d) dogEat2(d) } 1 keepeye 2022-06-06 17:44:41 +08:00 struct 方法中不支持泛型 鸡肋 |
2 zu1k 2022-06-06 17:52:56 +08:00 via Android 静态分发与动态分发,一个是编译期就确定,一个是需要运行时确定 |
3 BeautifulSoap 2022-06-06 18:00:15 +08:00 via Android 不是很理解这个问题的目的,泛型和接口虽然能在一些情况下实现同样的功能,但它们是完全不一样的两样东西,原理也根本不一样。 搞不懂提问目的的话,我可能直接就回答 dogEat1 是用泛型实现的,dogEat2 是通过接口。。。 |
4 cmdOptionKana 2022-06-06 18:06:00 +08:00 接口本身就是一个类型,这个类型是定死的。 由于 Go 以前没有泛型,因此接口负责处理一些多态问题。 可以认为,Go 对接口的支持更好一点,因此你在设计时可以优先试试接口,如果发现接口解决不了你的具体问题,再尝试用泛型。 |
5 Vegetable 2022-06-06 18:06:03 +08:00 靠,这刚发布就上面试题了?还没用上呢都 |
6 cmdOptionKana 2022-06-06 18:09:10 +08:00 或者这样说,当需要用到 interface{} 时,才考虑用泛型。 |
7 Leviathann 2022-06-06 18:11:43 +08:00 是参数多态和子类型多态的区别 |
8 PlG5sBkXD1ziLeGB 2022-06-06 18:36:29 +08:00 via iPhone 问个问题,用 go 开发的各位工作中已经使用泛型了吗 |
9 feelinglucky 2022-06-06 18:38:48 +08:00 @yyf1234 目前我这边的项目没有,还在统一使用 go1.17 版本 |
10 v2defy OP @yyf1234 我在工作中也没有用过,听说下个版本泛型的[]符号要改成跟其他语言一样的<>,也就是说现在写的泛型代码只能存活一个小版本,谁敢在这时候用呢 |
12 Buges 2022-06-06 18:56:35 +08:00 via Android go 现在的泛型设计非常糟糕,用于类型约束的 interface 只能用于类型约束,而不能当普通接口动态派发。 这种“类型约束的 interface”和原本的 interface 完全是两种东西了,还共用一个名字。 |
13 acehowxx 2022-06-06 20:00:55 +08:00 via Android @v2defy 不要道听途说,传播谣言。以 go 团队对于兼容性保证的作风来看,几无可能会改泛型的写法。 |
14 xiongxin8802 2022-06-06 20:26:59 +08:00 接口是动态分发,范型是编译时生产对应类型代码,猜的 |
15 voidmnwzp 2022-06-06 20:39:52 +08:00 via iPhone 有点扯 这 1.8 beta 功能 生产环境压根不可能用到吧 |
16 iseki 2022-06-06 20:51:53 +08:00 @yyf1234 用了,但感觉目前没太大用处,主要是 method 不支持泛型参数,类型推导也太弱,就裂开,感觉这个问题只要还用 Go 就不可能解决 |
17 chaleaochexist 2022-06-06 20:59:47 +08:00 @yyf1234 1.18 对泛型的支持有很多限制. 几乎可以认为无法再实战中使用. |
18 BeautifulSoap 2022-06-06 23:03:40 +08:00 现在 Go 的泛型也就写写通用链表、树、utils 之类比较合适,没有啥特别大的具体作用 |
19 fengjianxinghun 2022-06-07 10:15:41 +08:00 用上了,出来第一天就把所有项目换成了 1.18 ,现在是 1.18.3 |
20 tramm 2022-06-11 17:00:07 +08:00 1L 说的 struct 不支持泛型的话,那就只能应用于某个方法了? |