1 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
不確定您是否需要泛型...但讓我們解決您的編譯錯(cuò)誤:
invalid composite literal type T
以及關(guān)于復(fù)合文字的Go 規(guī)范:
LiteralType 的核心類型 T 必須是結(jié)構(gòu)、數(shù)組、切片或映射類型(語法強(qiáng)制執(zhí)行此約束,除非類型作為 TypeName 給出)。
有問題的代碼是:
type MessageParse[T proto.Message] struct {}
func (p *MessageParse[T]) Parse(message *NetMessage) proto.Message {
protoT := &T{} // <- here
泛型類型T受限于類型proto.Message。查看類型proto.Message (它是類型protoreflect.ProtoMessage的別名)表明它是 Gointerface類型而不是核心類型。因此它不能用于實(shí)例化復(fù)合文字。
您會(huì)在非泛型示例中遇到相同的編譯錯(cuò)誤,例如:
type mytype interface {
SomeMethod() error
}
_ = &mytype{} // // ERROR: invalid composite literal type mytype
- 1 回答
- 0 關(guān)注
- 837 瀏覽
添加回答
舉報(bào)