gpt4 book ai didi

function - Go 是否支持函数的类型转换/类型转换?

转载 作者:IT王子 更新时间:2023-10-29 01:55:47 25 4
gpt4 key购买 nike

我正在编写一个名为 "GoRequest" 的库它环绕着 net/http 包,旨在制作一个简单的 http 客户端。

现在,我在函数转换方面遇到了问题,它的参数类型相似。这是我的问题片段。

type Request *http.Request
type Response *http.Response

func (s *SuperAgent) RedirectPolicy(policy func(req Request, via []Request) error) *SuperAgent {
s.Client.CheckRedirect = policy
return s
}

s.Client.CheckRedirect 是 http.Client struct 中的成员并且应该收到 func(req *http.Request, via []*http.Request) error

如您所见,我想将 func(req Request, via []Request) error 转换为 --> func(req *http.Request, via []*http. Request) 具有相似类型的参数。

但它返回一个错误:

./main.go:142: cannot use policy (type func(Request, []Request) error) as type func(*http.Request, []*http.Request) error in assignment

我找不到任何此类转换的文档,如果可能,请提出建议。如果没有,请提出一些其他好的方法来做到这一点。谢谢!

最佳答案

您不能将 policy 包装在一个可以为您进行转换的匿名函数中吗?像这样:

func (s *SuperAgent) RedirectPolicy(policy func(req Request, via []Request) error) *SuperAgent {
s.Client.CheckRedirect = func(r *http.Request, v []*http.Request) error {
return policy(Request(r), []Request(v))
}
return s
}

我实际上不确定是否可以将 []*http.Request slice 转换为 []Request,但如果不能,您可以创建一个临时 slice 并一一进行接口(interface)转换:

func (s *SuperAgent) RedirectPolicy(policy func(req Request, via []Request) error) *SuperAgent {
s.Client.CheckRedirect = func(r *http.Request, v []*http.Request) error {
vv := make([]Request, len(v))
for i, r := range v {
vv[i] = Request(r)
}
return policy(Request(r), vv)
}
return s
}

应该这样做。

关于function - Go 是否支持函数的类型转换/类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23009221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com