如何使用结构的方法清除除某些字段以外的结构值



我有一个结构。我想清除除一些公共字段外的所有字段,例如NameGender,如何通过方法实现函数?

在我的真实代码中,我在结构中有很多字段,所以手动重置这些敏感字段不是我的选择

type Agent struct {
Name    string
Gender  string
Secret1 string
Secret2 string
}
func (a *Agent) HideSecret() {
fmt.Println("Hidding secret...")
new := &Agent{
Name:   a.Name,
Gender: a.Gender,
}
a = new
}

我尝试了*&的一些组合,但似乎不起作用。。。请帮忙。

James := Agent{
Name:    "James Bond",
Gender:  "M",
Secret1: "1234",
Secret2: "abcd",
}
fmt.Printf("[Before] Secret: %s, %sn", James.Secret1, James.Secret2)
James.HideSecret()
fmt.Printf("[After]  Secret: %s, %sn", James.Secret1, James.Secret2) // not working

高尔夫球场在这里:https://go.dev/play/p/ukJf2Fa0fPI

接收器是一个指针。您必须更新指针指向的对象:

func (a *Agent) HideSecret() {
fmt.Println("Hidding secret...")
cleaned := Agent{
Name:   a.Name,
Gender: a.Gender,
}
*a=cleaned
}

如果只想清除字段,这是一个简单的解决方案。它节省了一些内存

func (a *Agent) HideSecret() {
fmt.Println("Hidding secret...")
a.Secret1 = ""
a.Secret2 = ""
}

最新更新