将方法与返回“self”的结构相关联

时间:2014-02-22 18:04:57

标签: go

我知道Go没有传统的OOP概念。但是,我想知道是否有更好的方法来设计“构造函数”,因为我已经在下面的代码片段中完成了它:

type myOwnRouter struct {
}

func (mor *myOwnRouter) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello from my own Router!")
}

func newMyOwnRouter() *myOwnRouter {
    return &myOwnRouter{}
}

func init() {
    http.Handle("/", newMyOwnRouter())
    ...
}

我基本上想要摆脱“独立”的newMyOwnRouter()函数并将其作为结构本身的一部分,例如我希望能够做到这样的事情:

http.Handle("/", myOwnRouter.Router)

可行吗?

1 个答案:

答案 0 :(得分:2)

事实上的标准模式是一个函数calle New

package matrix
function NewMatrix(rows, cols int) *matrix {
    m := new(matrix)
    m.rows = rows
    m.cols = cols
    m.elems = make([]float, rows*cols)
    return m
}

当然,构造函数必须是Public函数,才能在包外部调用。

有关构造函数模式here

的更多信息

在你的情况下看起来你想要一个Sigleton包,那么这就是模式:

package singleton

type myOwnRouter struct {
}

var instantiated *myOwnRouter = nil

func NewMyOwnRouter() * myOwnRouter {
    if instantiated == nil {
        instantiated = new(myOwnRouter);
    }

    return instantiated;
}