在 Golang 中,struct 是一种非常灵活的数据类型,它可以被用来表示复杂的数据结构,并且可以定义与之相关联的 method。相比之下,传统面向对象编程语言中类和对象是不可分割的概念,而 Golang 中的 struct 和 method 是独立的概念。
Golang 将 method 写在类外(即将 method 定义为一个单独的函数),主要有以下几个原因:
Go 的设计哲学之一是尽可能简单和直接,避免过度复杂的继承关系、多态性等。将 method 写在类外符合这一哲学,使得代码更加简洁清晰。
与传统面向对象编程语言相比,将 method 写在类外可以更好地支持组合方式。在 Golang 中,我们可以通过将一个或多个 struct 嵌入到另一个 struct 中来实现组合。这种方式比继承更加灵活,也更容易理解和维护。
将 method 写在类外使得代码更加可测试和可重用。在测试和使用库时,我们可以方便地调用 method 或者直接使用函数,而不必创建一个完整的对象并初始化其状态,这有助于提高代码的可测试性和可重用性。
需要注意的是,虽然 Golang 将 method 写在类外,但是它们仍然可以被看作是与 struct 相关联的一部分。Golang 中的 method 和 struct 之间的关系可以被视为“语义上的”而不是“结构上的”。