我有一个结构。我想清除除一些公共字段外的所有字段,例如Name
、Gender
,如何通过方法实现函数?
在我的真实代码中,我在结构中有很多字段,所以手动重置这些敏感字段不是我的选择
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 = ""
}