Generics &引用;无法将myType用作类型接口{}";?我想所有类型都算作Go中的接口{}?

Generics &引用;无法将myType用作类型接口{}";?我想所有类型都算作Go中的接口{}?,generics,go,protocol-buffers,Generics,Go,Protocol Buffers,我正在尝试编写一个可以接受任何类型的函数(更具体地说,尝试让它接受任何类型的protobuffer,但如果必须的话,我会满足于更广泛的泛型)。根据我所读到的,似乎可以这样做: func processSlice(mySlice []interface{}) void{ // Do stuff in here } 但是,当我尝试将其用于protos的切片时,会出现以下错误: cannot use myProtoSlice (type []*MyProto) as type []interfa

我正在尝试编写一个可以接受任何类型的函数(更具体地说,尝试让它接受任何类型的protobuffer,但如果必须的话,我会满足于更广泛的泛型)。根据我所读到的,似乎可以这样做:

func processSlice(mySlice []interface{}) void{
  // Do stuff in here
}
但是,当我尝试将其用于protos的切片时,会出现以下错误:

cannot use myProtoSlice (type []*MyProto) as type []interface{} in argument to processSlice

正如错误清楚地描述的那样:

无法将myProtoSlice(类型[]*MyProto)用作中的类型[]接口{} processSlice的参数

[]接口的{}
不是
接口{}
类型,它是不同的。戈朗对类型要求很严格

将接口的切片更改为just interface,以包装函数中接收到的值。修改以下代码:

func processSlice(mySlice []interface{}) void{
  // Do stuff in here
}
传递接口的步骤

func processSlice(mySlice interface{}) void{
  // Do stuff in here
}

正如错误清楚地描述的那样:

无法将myProtoSlice(类型[]*MyProto)用作中的类型[]接口{} processSlice的参数

[]接口的{}
不是
接口{}
类型,它是不同的。戈朗对类型要求很严格

将接口的切片更改为just interface,以包装函数中接收到的值。修改以下代码:

func processSlice(mySlice []interface{}) void{
  // Do stuff in here
}
传递接口的步骤

func processSlice(mySlice interface{}) void{
  // Do stuff in here
}

你不能从一个类型的片段转换到另一个类型的片段(就像你可以转换类型一样),这会很昂贵,他们认为最好强制你显式


简单地为实际需要处理的每种切片类型编写函数(如果您知道类型,但数量不多的话)可能不会那么痛苦

您不能将一种类型的切片强制转换为另一种类型的切片(就像您可以转换类型一样),这将非常昂贵,而且他们认为最好强制您显式转换


简单地为实际需要处理的每种切片类型编写函数(如果您知道类型,但数量不多的话)可能不会那么痛苦

[]接口{}
不是
接口{}
,它是一个特定类型(类型的一部分
接口{}
)。您必须将
[]接口{}
传递给该函数,但该片可以包含任何类型的值(或任何类型的混合)。请参阅常见问题解答:尝试使用类似
func processSlice(mySlice…interface{})的方法void{//Do stuff in here}
[]接口{}不是
接口{}
,它是特定类型(类型为
interface{}
)的切片。您必须将
[]接口{}
传递给该函数,但该切片可以包含任何类型的值(或任何类型的混合)。请参阅常见问题解答:尝试使用类似
func processSlice(mySlice…interface{})void{//Do stuff in here