为什么要在结构的类型定义之外声明方法?例如:
type antenna struct {
name string
length float32
girth float32
bloodtype string
}
func (p *antenna) extend() {
p.length += 10
}
在我看来,该方法可能是该结构的一部分? (现在,我们应该忽略结构应该是值类型)
type antenna struct {
name string
length float32
girth float32
bloodtype string
func extend() {
length += 10
}
}
这将更类似于传统的OOP。除了“结构是值类型而类是引用类型”之外,我没有找到任何很好的解释来说明为什么这样做。我知道区别,但这对我来说不是一个令人满意的答案。无论如何,该方法都必须像这样被调用:
var x = antenna()
x.extend()
那么分离struct和方法有什么意义呢?像使用典型的OOP语言一样,将它们在代码中直观地分组在一起似乎对我有用吗?
答案 0 :(得分:0)
我的观点:
1.这种方法更简单,并使结构类型和其他类型(如以下代码)的语言一致 /统一。
2.您不需要使用this
或self
指针,而可以根据需要命名它,这使得解释p
(在您的示例中)更简单。
这也可能是相关的:
In Go is naming the receiver variable 'self' misleading or good practice?
您可以定义自己的类型,请参阅此示例(此命名类型中没有内部或结构):>
package main
import "fmt"
type num int32
func (p *num) inc() {
*p++
}
func main() {
p := num(100)
p.inc()
fmt.Println(p) // 101
}
答案 1 :(得分:0)
在golang中,如果我们需要与类型相关联的函数(例如struct
),则必须按以下方式对其进行定义(此处为go struct
):
type my_type struct {
// fields ...
}
func (m my_type) fn_name(fn_parameters) fn_return_type {
// do whatever we want
}
这不是您以自己的方式定义的。但是可以根据需要使用标识符的名称。