gpt4 book ai didi

go - 将值设置为继承字段

转载 作者:数据小太阳 更新时间:2023-10-29 03:04:01 25 4
gpt4 key购买 nike

在这里看我的代码

package main

import (
"fmt"
)

type iFormatter interface {
SetName(name string)
Format() string
}

type BaseFormatter struct {
name string
}

type Formatter struct {
BaseFormatter
}

func (f Formatter) SetName(name string) {
f.name = name
}
func (f Formatter) Format() string {
return "formatted " + f.name
}

func main() {
var formatters = []iFormatter{Formatter{}}
formatters[0].SetName("KARL")
fmt.Println(formatters[0].Format())
}

我不明白,为什么在调用 SetName 后没有设置“name”字段。

这是 playground 的链接 https://play.golang.org/p/Jkcjv_hFRC .

最佳答案

SetName() 方法应该在指针上,而不是值上。目前 fformatters[0] 的副本,对 f 的更改不会传播到 formatters[0].

下面的代码应该可以解决问题。

func (f *Formatter) SetName(name string) {
f.name = name
}

...

var formatters = []iFormatter{&Formatter{}}

您不需要将 Format() 方法更改为指针接收器,尽管在您的情况下这样做可能会更好。

参见:https://play.golang.org/p/rFmCZesbTB

关于go - 将值设置为继承字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46587560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com