关于接口的方法中使用泛型,其他struct实现的问题

wong · 2023-03-02 17:04:17 · 2656 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2023-03-02 17:04:17 的主题,其中的信息可能已经有所发展或是发生改变。

下图 接口有泛型,方法没有泛型, RealName 是实现了 Name 接口的

image.png

为什么 给Name接口中的Say方法使用泛型传参,RealName 就没有实现 Name 接口了

image.png


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

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

2656 次点击  ∙  1 赞  
加入收藏 微博
5 回复  |  直到 2023-03-03 16:12:55
jan-bar
jan-bar · #1 · 2年之前

你这个是对的吧,我运行成功了,估计是编译器版本太旧没提示出来吧。

package main

import (
    "fmt"
)

func main() {
    var s Name[int] = RealName[int]{}
    s.Say(123)
}

type Name[T any] interface {
    Say(t T)
}

type RealName[T any] struct {
}

func (r RealName[T]) Say(t T) {
    fmt.Println(t)
}
wong
wong · #2 · 2年之前
jan-barjan-bar #1 回复

你这个是对的吧,我运行成功了,估计是编译器版本太旧没提示出来吧。 ```go package main import ( "fmt" ) func main() { var s Name[int] = RealName[int]{} s.Say(123) } type Name[T any] interface { Say(t T) } type RealName[T any] struct { } func (r RealName[T]) Say(t T) { fmt.Println(t) } ```

image.png

运行成功了,确实是编译器的问题 我这边使用的IDE是 GoLand 2021.3.2 大佬是使用哪个版本的呀

jan-bar
jan-bar · #3 · 2年之前

@wong 我的是2022.2,也没有正确提示。好久没更新了,也不晓得最新版咋样。最近Go1.20也发布了,也有一些新特性,我的Goland上还有红线报错提示呢。不过你上面这个错误提示是没了,但是左侧也没有向上的结构体满足接口的图标。

搜狗截图20230303135058.png

yleoer
yleoer · #4 · 2年之前

2022.3.2 正常显示

image.png

wong
wong · #5 · 2年之前

下面是 ChatGPT 的说法 0.o

image.png image.png

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