问题:虽然这样间接地实现了多态,但是由于 Model 真的没有任何 method (方法)只有数据成员,这个类型定义为 interface{} 总之有些不优雅的感觉,想问下大家有没有更好的实现方法?
代码见 gist (或下方的图片): https://gist.github.com/inhzus/b301db257c520c15466fc833aaaec7f6


问题:虽然这样间接地实现了多态,但是由于 Model 真的没有任何 method (方法)只有数据成员,这个类型定义为 interface{} 总之有些不优雅的感觉,想问下大家有没有更好的实现方法?
代码见 gist (或下方的图片): https://gist.github.com/inhzus/b301db257c520c15466fc833aaaec7f6

1 way2create Aug 6, 2019 怎么我这 gist 都打不开...github 又可以 |
2 inhzus OP @way2create #1 gist 貌似不架梯子确实比较难出去... 看图片好了= = |
3 mm163 Aug 6, 2019 if 来 if 去的,还什么多态? |
5 mm163 Aug 6, 2019 接口的多种不同的实现方式即为多态,只要针对不同的类型实现同一个接口就行了,基本的用法。 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 Aug 6, 2019 针对接口编程。 不要随便使用 iterface{}这种类型转来转去的。这和随意转成 void*有啥区别。 |
7 jessun1990 Aug 6, 2019 via Android @mm163 同意,用接口实现多态最合适。 |
8 reus Aug 6, 2019 我不反对使用 interface{},尤其是需要动态性时,用 interface{} 是必然的 不过你这个代码,和多态实在没什么关系。多态是不涉及 type assertion 的 |