分享
  1. 首页
  2. 文章

匿名结构体添加方法的问题

guoapeng · · 1398 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

开发中遇到一个问题,在如下代码中, 35 到 41 行的位置switch语句的default分支(Point A), 本意是用匿名结构体实现接口, 匿名结构体的作用就是返回resource not found 反馈给调用者, 但是发现在代码中很难给一个匿名结构体添加一个方法并使其符合某个接口. 我知道将返回类型改写为函数类型而不是接口类型, 可以解决遇到的问题. **但是我发这个篇文章的目的是想探讨一下, 如何给一个匿名结构体添加方法,并让它符合某个接口** 以下是编译器在代码 第35行(Pinter A) 给出的提示信息 Cannot use 'struct { handle func(w http.ResponseWriter, d []byte, r *http.Request, id string) }{ func(w http.ResponseWriter, d []byte, r *http.Request, id string){ http.NotFound(w, r) }, }' (type struct {...}) as type MediaHandler in assignment Type does not implement 'MediaHandler' as 'handle' method is missing l ```go package captcha import ( "bytes" "io" "net/http" "path" "strings" "time" ) type MediaHandler interface { handle(w http.ResponseWriter, d []byte, r *http.Request, id string) } type captchaHandler struct { imgWidth int imgHeight int } func (h *captchaHandler) createMediaHandler( r *http.Request) MediaHandler { dir, file := path.Split(r.URL.Path) ext := path.Ext(file) lang := strings.ToLower(r.FormValue("lang")) download := path.Base(dir) == "download" var mediaHandler MediaHandler switch ext { case ".png": mediaHandler = &ImgHandler{h.imgWidth, h.imgHeight, download} case ".wav": mediaHandler = &AudioHandler{lang, download} default: mediaHandler = struct { //Point A: compile error , struct can't be assigned to mediaHandler handle func(w http.ResponseWriter, d []byte, r *http.Request, id string) }{ func(w http.ResponseWriter, d []byte, r *http.Request, id string){ http.NotFound(w, r) }, } } return mediaHandler } ```

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1398 次点击 ∙ 1 赞
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏