go - 在 Go 中实现构造函数/init 方法的最佳方法是什么
问题描述
我有一个程序如下:
package main
//Define declare variables
type Define struct {
len int
breath int
}
//Area calculate area
func (e *Define) Area() (a int) {
a = e.len * e.breath
return a
}
我将上述程序称为:
package main
func main() {
y := Define{10, 10}
x := y.Area()
print(x)
}
我想让函数 Area() 作为结构初始化的一部分。目前,我必须为“Define”创建一个新对象,即“y”,然后调用方法Area。相反,一旦我创建对象,Area 方法是否会自动计算?
解决方案
我会将定义重命名为更好的名称,例如几何。通常在 Golang 中,New... 被用作“构造函数”
既然您说您希望自动计算区域,请将区域包含为结构字段。以下是我的做法(https://play.golang.org/p/4y6UVTTT34Z):
package main
//variables
type Geometry struct {
len int
breath int
area int
}
// Constructor
func NewGeometry(len int, breadth int) *Geometry {
g := &Geometry{len, breadth, Area(len, breadth)}
return g
}
//Area calculate area
func Area(len, breadth int) (a int) {
return len * breadth
}
func main() {
g := NewGeometry(10, 2)
fmt.Println(g.area)
}
推荐阅读
- android - 如何在一天中创建多个警报,并且这将在每周选定的日子重复?
- sql - 循环遍历表以连接行
- azure - Azure 指标的采样间隔
- android - AutoCompleteTextView - 更改方向 - 横向模式下消息“IndexOutOfBoundsException”崩溃
- python - 无法提取正确/所有信息需要
- java - 无法在自定义 gradle 插件实现中使用外部依赖项
- amazon-web-services - 您可以为 sns 电子邮件添加样式吗?
- azure - Azure 函数批处理大小
- angular - 失去焦点Angular表单时验证错误消失
- python - 如何修复 python 3 中的“无效编码”错误?