问题:虽然这样间接地实现了多态,但是由于 Model 真的没有任何 method (方法)只有数据成员,这个类型定义为 interface{} 总之有些不优雅的感觉,想问下大家有没有更好的实现方法?
代码见 gist (或下方的图片): https://gist.github.com/inhzus/b301db257c520c15466fc833aaaec7f6
1
way2create 2019-08-06 20:09:15 +08:00
怎么我这 gist 都打不开...github 又可以
|
2
inhzus OP @way2create #1 gist 貌似不架梯子确实比较难出去... 看图片好了= =
|
3
mm163 2019-08-06 20:52:02 +08:00
if 来 if 去的,还什么多态?
|
5
mm163 2019-08-06 21:02:00 +08:00
接口的多种不同的实现方式即为多态,只要针对不同的类型实现同一个接口就行了,基本的用法。
import "fmt" type Model interface{ PrintValues() } type A struct { x int } type B struct { A y int } func (a*A) PrintValues(){ fmt.Printf("x: %v", a.x) } func (b*B) PrintValues(){ fmt.Printf("x: %v, y: %v", b.x, b.y) } func test(model Model) { model. PrintValues() } |
6
cabing 2019-08-06 21:07:04 +08:00
针对接口编程。
不要随便使用 iterface{}这种类型转来转去的。这和随意转成 void*有啥区别。 |
7
jessun1990 2019-08-06 21:17:42 +08:00 via Android
@mm163 同意,用接口实现多态最合适。
|
8
reus 2019-08-06 21:20:09 +08:00
我不反对使用 interface{},尤其是需要动态性时,用 interface{} 是必然的
不过你这个代码,和多态实在没什么关系。多态是不涉及 type assertion 的 |