在方法上创建一个对象
Create an object on method
当我在方法上创建一个自我对象时,这是一个错误的代码?像这样(看方法Create)
package main
import (
"fmt"
)
type SelfInitialisator struct {
Fields1, Fields2 string
}
func (rcv *SelfInitialisator) Method1() {
fmt.Println(rcv.Fields1, rcv.Fields2)
}
func (rcv *SelfInitialisator) CreateObject() {
s := new(SelfInitialisator)
s.Fields1 = "Hello"
s.Fields2 = "Foo"
}
func main() {
s := new(SelfInitialisator)
s.CreateObject()
}
在此代码中,您将创建一个内存对象,然后将其丢弃并创建另一个效率相当低的对象。你也不退货。
s := new(SelfInitialisator)
s.CreateObject()
Go 的方式是使用一个函数来创建你的对象,就像这样
func NewSelfInitialisator() *SelfInitialisator {
s := new(SelfInitialisator)
s.Fields1 = "Hello"
s.Fields2 = "Foo"
return s
}
并调用
s := NewSelfInitialisator()
它不会改变接收器,只会创建另一个实例,该实例将在 CreateObject() 调用结束时丢失。
您可以直接使用接收器来初始化它的内容:
func (rcv *SelfInitialisator) CreateObject() {
rcv.Fields1 = "Hello"
rcv.Fields2 = "Foo"
}
当我在方法上创建一个自我对象时,这是一个错误的代码?像这样(看方法Create)
package main
import (
"fmt"
)
type SelfInitialisator struct {
Fields1, Fields2 string
}
func (rcv *SelfInitialisator) Method1() {
fmt.Println(rcv.Fields1, rcv.Fields2)
}
func (rcv *SelfInitialisator) CreateObject() {
s := new(SelfInitialisator)
s.Fields1 = "Hello"
s.Fields2 = "Foo"
}
func main() {
s := new(SelfInitialisator)
s.CreateObject()
}
在此代码中,您将创建一个内存对象,然后将其丢弃并创建另一个效率相当低的对象。你也不退货。
s := new(SelfInitialisator)
s.CreateObject()
Go 的方式是使用一个函数来创建你的对象,就像这样
func NewSelfInitialisator() *SelfInitialisator {
s := new(SelfInitialisator)
s.Fields1 = "Hello"
s.Fields2 = "Foo"
return s
}
并调用
s := NewSelfInitialisator()
它不会改变接收器,只会创建另一个实例,该实例将在 CreateObject() 调用结束时丢失。
您可以直接使用接收器来初始化它的内容:
func (rcv *SelfInitialisator) CreateObject() {
rcv.Fields1 = "Hello"
rcv.Fields2 = "Foo"
}