lishuangquan1987 2023-08-25 14:52 采纳率: 0%
浏览 10

go1.19使用泛型编译报错了,使用C#这样写没问题

go 1.19
代码如下:请问我错哪里了?

type ICanByteable interface {
    ToBytes() ([]byte, error)
}

type XWJRequest[T ICanByteable] struct {
    CmdCode     uint16
    Group       uint16
    RequestData T
}

func (r *XWJRequest[ICanByteable]) Test() {
    fmt.Println(r.RequestData == nil)
}
type RequestData struct {
}

func (r *RequestData) ToBytes() ([]byte, error) {
    return []byte{1, 2, 3}, nil
}

func main() {
    var requestData *RequestData
    request := &XWJRequest[ICanByteable]{
        CmdCode:     0,
        Group:       0,
        RequestData: requestData,
    }
    request.Test()
}

使用go build命令构建,提示运行报错:
.\main.go:16:31: invalid operation: r.RequestData == nil (mismatched types ICanByteable and untyped nil)

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-08-25 16:11
    关注

    引用 皆我百晓生 小程序内容作答:

    根据你提供的代码,问题出在方法 Test() 的接收者类型上。在 Go 语言中,泛型类型参数不能直接用于方法接收者的类型声明。你可以将 Test() 方法的接收者类型改为 *XWJRequest[T],然后在方法内部进行类型断言来判断 RequestData 是否为 nil。修改后的代码如下:

    type ICanByteable interface {
        ToBytes() ([]byte, error)
    }
    
    type XWJRequest[T ICanByteable] struct {
        CmdCode     uint16
        Group       uint16
        RequestData T
    }
    
    func (r *XWJRequest[T]) Test() {
        fmt.Println(r.RequestData == nil)
    }
    
    type RequestData struct {
    }
    
    func (r *RequestData) ToBytes() ([]byte, error) {
        return []byte{1, 2, 3}, nil
    }
    
    func main() {
        var requestData *RequestData
        request := &XWJRequest[ICanByteable]{
            CmdCode:     0,
            Group:       0,
            RequestData: requestData,
        }
        request.Test()
    }
    

    请注意,目前 Go 语言还不支持泛型,你的代码中使用的是泛型的提案语法。因此,即使你修改了代码,Go 1.19 仍然无法编译通过。如果你需要使用泛型功能,可以考虑使用其他支持泛型的语言,如 C#。

    评论

报告相同问题?

问题事件

  • 创建了问题 8月25日

悬赏问题

  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP