首页 > 解决方案 > 在 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 方法是否会自动计算?

标签: goconstructorinit

解决方案


我会将定义重命名为更好的名称,例如几何。通常在 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)
}

推荐阅读