我有一個(gè)結(jié)構(gòu)。我想清除除一些公共字段以外的所有字段,例如Name, Gender,如何通過方法實(shí)現(xiàn)功能?在我的真實(shí)代碼中,我在結(jié)構(gòu)中有很多字段,所以手動(dòng)重置這些敏感字段不是我的選擇。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}我嘗試了一些*和的組合&,但似乎不起作用......請(qǐng)幫忙。 James := Agent{ Name: "James Bond", Gender: "M", Secret1: "1234", Secret2: "abcd", } fmt.Printf("[Before] Secret: %s, %s\n", James.Secret1, James.Secret2) James.HideSecret() fmt.Printf("[After] Secret: %s, %s\n", James.Secret1, James.Secret2) // not workinggolang 操場在這里:https ://go.dev/play/p/ukJf2Fa0fPI
2 回答

白衣非少年
TA貢獻(xiàn)1155條經(jīng)驗(yàn) 獲得超0個(gè)贊
接收器是一個(gè)指針。您必須更新指針指向的對(duì)象:
func (a *Agent) HideSecret() {
fmt.Println("Hidding secret...")
cleaned := Agent{
Name: a.Name,
Gender: a.Gender,
}
*a=cleaned
}

jeck貓
TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果您只想清除字段,這是一個(gè)簡單的解決方案。它節(jié)省了一些內(nèi)存
func (a *Agent) HideSecret() {
fmt.Println("Hidding secret...")
a.Secret1 = ""
a.Secret2 = ""
}
- 2 回答
- 0 關(guān)注
- 93 瀏覽
添加回答
舉報(bào)
0/150
提交
取消