首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Go支持类型转换/转换功能吗?

Go支持类型转换/转换功能吗?
EN

Stack Overflow用户
提问于 2014-04-11 09:51:55
回答 1查看 109关注 0票数 1

我正在编写一个名为"GoRequest“的库,它封装在net/http包中,用于制作一个简单的http客户端。

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

代码语言:javascript
运行
复制
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结构的成员,应该接收func(req *http.Request, via []*http.Request) error

正如您可能看到的,我希望转换具有类似类型参数的func(req Request, via []Request) error -> func(req *http.Request, via []*http.Request)

但是它返回给我一个错误:

代码语言:javascript
运行
复制
./main.go:142: cannot use policy (type func(Request, []Request) error) as type func(*http.Request, []*http.Request) error in assignment

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-11 10:30:47

您不能将policy封装在一个匿名函数中,以便为您进行转换吗?就像这样:

代码语言:javascript
运行
复制
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片转换为[]Request,但如果不能,您可以创建一个临时片并逐个进行接口转换:

代码语言:javascript
运行
复制
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
}

这样就行了。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23009221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档