在方法上创建一个对象

时间:2015-01-03 10:37:41

标签: go

当我在方法上创建自我对象时,这是一个错误的代码?像这样(看方法创建)

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()

}

2 个答案:

答案 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"
}