Go 将方法与返回“0”的结构相关联;“自我”;
我知道Go没有传统的OOP概念。然而,我很想知道是否有更好的方法来设计“构造函数”,正如我在下面的代码片段中所做的那样:Go 将方法与返回“0”的结构相关联;“自我”;,go,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() *myOwnRoute
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)
这可行吗?事实上,标准模式是一个新函数
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
}
当然,构造函数必须是公共函数,才能在包外部调用
更多关于构造函数模式的信息
在您的情况下,看起来您想要一个Sigleton软件包,那么以下是模式:
package singleton
type myOwnRouter struct {
}
var instantiated *myOwnRouter = nil
func NewMyOwnRouter() * myOwnRouter {
if instantiated == nil {
instantiated = new(myOwnRouter);
}
return instantiated;
}
所以这总是在包级别上,对吗?然后就是matrix.NewMatrix(…)。在结构级别上没有类似的方法,对吗?不,这是go中的“构造函数”,核心包使用相同的模式:谢谢。非常感谢。最后一个问题:在链接到的源中,它们返回指针(return&Cmd)。如果我接受您粘贴的代码,我是否必须返回&m并返回&实例化?或者您在这里编写的方式正确吗?实例化已经是一个指针,在您的代码中,您正在创建一个实例并返回他的指针。是的,没错
m:=matrix{}
表示法返回一个值而不是指针,因此需要返回&m
m:=new(matrix)
创建一个指向矩阵的指针,因此只需返回m
。直接引用golang文档:“表达式new(File)
和&File{}
是等效的。”