猿问

在方法上创建对象

当我在方法上创建一个自我对象时,这是一个糟糕的代码吗?像这样(看方法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()


}


侃侃无极
浏览 200回答 2
2回答

汪汪一只猫

在这段代码中,您正在创建一个内存对象,然后将其丢弃并创建另一个效率相当低的对象。你也不退货。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"}
随时随地看视频慕课网APP

相关分类

Go
我要回答