我有一个 struct .我想清除所有的字段except一些公共字段,例如NameGender,如何通过方法实现该功能?

In my real code, I have many fields in the struct, so reset those sensitive fields manually is not my option.

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
}

我try 了*&的几种组合,但似乎不起作用... 请帮帮忙.

    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 working

golang playground 在这里:https://go.dev/play/p/ukJf2Fa0fPI

推荐答案

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

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

Go相关问答推荐

Go编译器标志-修剪路径不完全工作

如何使用我的 struct 化日志(log)记录格式使人panic ?

允许在 struct 中使用复合作为函数参数

如何防止程序B存档/删除围棋中程序A当前打开的文件?

Go SQLCMD比Windows本机版本慢吗?

无效操作:v > max(类型参数 T 与 > 不可比较)

Kusto Go API 从多个表查询

启动套接字服务器会干扰 gRPC/http 客户端服务器通信 Golang

Golang和Gin web框架在router.Run()之后执行代码

xml.Unmarshal 不支持的类型 struct

Golang:如何在不转义每个动作的情况下呈现模板的模板?

在 Cloud Run 中找不到默认凭据

在两个单独的速率受限端点之间同步请求

访问传递给可变参数函数的通用 struct 的特定字段

grpc-gateway:重定向与定义不匹配(原始文件)

从 Makefile 运行时权限被拒绝

如何从 Go 1.18 中的单个方法返回两种不同的具体类型?

为什么我不能使用来自 gocloak 中 Login() 的访问令牌在 KeyCloak 中创建新客户端?

正确编码 JWT

如何正确判断 io.Reader 是否为零?