golang 语言的思考
背景
自从接触 golang 语言后,发现编程是简化了不少,不用把大量时间消耗在如何正确编写代码,而专注于代码的实现。
心得
优势
- 开发时顺着设计思路,实现不会跑偏。
- 并发逻辑高效,随时开协程。
劣势:
复用比较费劲,复杂的设计模式实现起来不容易。
golang 没有继承的概念,只有组合,多态支持的不完整。通过组合来实现方法的覆盖,这里有个严重的问题,就是覆盖的方法 A 中,如果调用了内嵌结构体的方法 B,该方法 B 运行就在内嵌结构体,如果在方法 B 调用覆盖的其他方法是无效的。
1 | type Base struct{} |
如果你在覆盖的方法中调用了内嵌结构体的方法,可能会导致不符合预期的行为。因为内嵌结构体的方法调用不会自动使用外层结构体中覆盖的方法,而是使用内嵌结构体原有的方法。
为了避免这种情况:
- 避免在覆盖的方法中调用内嵌结构体的方法:如果可能,尽量在覆盖的方法中直接实现所需的逻辑,而不是依赖内嵌结构体的方法。
- 使用接口:通过接口来定义行为,并在外层结构体中实现这些接口。这可以提供更好的多态性和灵活性。
- 重新考虑设计,看看是否有更好的方式来组织代码。
- 单元测试尽量覆盖一下,避免出现预期外的情况。