我知道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)
可行吗?
答案 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;
}