当我在方法上创建自我对象时,这是一个错误的代码?像这样(看方法创建)
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()
}
答案 0 :(得分:4)
在这段代码中,您正在创建一个内存对象,然后将其丢弃并创建另一个效率相当低的内存对象。你也没有回来。
s := new(SelfInitialisator)
s.CreateObject()
Go方式是使用函数来创建对象,比如
func NewSelfInitialisator() *SelfInitialisator {
s := new(SelfInitialisator)
s.Fields1 = "Hello"
s.Fields2 = "Foo"
return s
}
并致电
s := NewSelfInitialisator()
答案 1 :(得分:1)
它不会改变接收器,只会创建另一个在CreateObject()调用结束时丢失的实例。
您可以直接使用接收器来初始化其内容:
func (rcv *SelfInitialisator) CreateObject() {
rcv.Fields1 = "Hello"
rcv.Fields2 = "Foo"
}