在方法上创建一个对象

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