所以我确定我想在这里作弊,但是ResponseWriter文档有一个方法'Header()'返回它正在使用的Header对象.

现在我得到了一个http.来自其他地方的回复,我想将所有的标题从中复制到我的ResponseWriter中.

现在,我可以使用这样的for循环:

for k := range resp.Header 
    w.Header().Add(k, resp.Header.Get(k))
}

从逻辑上讲,将引用从ResponseWriter的标题更改为ResponseWriter的标题对我来说也是有意义的,但是ResponseWriter类型似乎正在积极try 阻止我这样做.

我想到了这样的蠢事

w.Header() = resp.Header

rwHeader := w.Header()
rwHeader = resp.Header

显然,这两种方法都毫无意义,根本不起作用,但希望能传达出我想要做的事情.

Can anyone offer an explanation of why what I'm trying to do doesn't work? 或 maybe it does and I'm just not seeing the way to do it?

推荐答案

你不必自己写这个循环.Go 1.18增加了包golang.org/x/exp/maps,提供了方便的Copy function:

func Copy[M ~map[K]V, K comparable, V any](dst, src M)

Copy复制src中的所有键/值对,并将它们添加到dst中.什么时候

import "golang.org/x/exp/maps"
// ...
maps.Copy(w.Header(), resp.Header)

Go相关问答推荐

如何使用Docker Compose配置Go,使main. go文件位于/CMD文件夹中

在保留额外参数的同时解封YAML

错误.如果它包含切片,则返回FALSE

Golang SDK for DynamoDB:ReturnValuesOnConditionCheckFailure在条件chcek失败发生时不返回条件的详细信息

将这两个函数合二为一的惯用方法

Go 中的sync.Cond 与 Wait 方法

当我使用 CircleCI 构建 Go Image 时,我得到runtime/cgo: pthread_create failed: Operation not allowed

在VSCode中如何使用特定的文件名提供编译命令

Golang校验器包:重命名字段错误处理

hyperledger fabric - go:在 $PATH 中找不到可执行文件

如何匹配两次出现的相同但随机字符串之间的字符

Go:从 ssl 证书中获取 'subject/unstructeredName' 的值

如何使用带有方法的字符串枚举作为通用参数?

如何将 npm 安装进度条通过管道传输到终端?

从动态输入中提取字符串,其中部分字符串可能不存在

如何将具有嵌入式 struct 的 struct 展平为 json

在 go 中将运行命令的标准输出发送到其标准输入

无法建立连接,因为目标机器主动拒绝它 Golang

Grafana/Prometheus 将多个 ip 可视化为查询

HCL 解码:具有多个标签的块