英文:
How to pass generic type of array as the parameter for the function in Golang
问题
我是你的中文翻译助手,以下是你要翻译的内容:
我对Golang还不熟悉,我的问题是如何使函数接受泛型类型的参数。以下是我最近遇到的具体问题:
我定义了一个包含函数的结构体:
type TestArgs struct {
name string
...
customAssertForTypeA func(array []*pb.TypeA)
customAssertForTypeB func(array []*pb.TypeB)
}
// 使用TestArgs定义测试用例。
tests := []TestArgs{
{
name: "Test A",
customAssertForTypeA: func(array []*pb.TypeA) {
// 一些代码
}
},
{
name: "Test B",
customAssertForTypeB: func(array []*pb.TypeB) {
// 一些代码
}
},
}
我的问题是如何使customAssert
函数接受泛型类型的参数?我看到一些类似的问题有解决方案是使用interface{}
,所以我尝试了以下代码:
customAssert func(array interface{})
但是它没有起作用。
英文:
I'm new to Golang, My question is how to make function accept generic type of parameter. Here is the specific problem I met recently:
I defined a struct which contains a function
type TestArgs struct {
name string
...
customAssertForTypeA func(array []*pb.TypeA)
customAssertForTypeB func(array []*pb.TypeB)
}
// Define the test case with TestArgs.
tests := []TestArgs{
{
name: "Test A",
customAssertForTypeA: func(array []*pb.TypeA) {
// Some code
}
},
{
name: "Test B",
customAssertForTypeB: func(array []*pb.TypeB) {
// Some code
}
},
}
My question is how to make customerAssert function accept generic type of parameter?
I saw some similar question with solution interface{}
, so I tried
customAssert func(array interface{})
and it doesn't work.
答案1
得分: 3
类型断言(https://tour.golang.org/methods/15)是在你拥有一个interface{}
类型的变量并且想要访问具体值时使用的。
type TestArgs struct {
name string
customAssert func(interface{})
}
// 使用TestArgs定义测试用例。
tests := []TestArgs{
{
name: "Test A",
customAssert: func(param interface{}) {
// 一些代码
array, ok := param.([]*pb.TypeA)
if !ok {
t.Fatal("断言错误 TypeA")
}
// 使用array
},
},
{
name: "Test B",
customAssert: func(param interface{}) {
// 一些代码
array, ok := param.([]*pb.TypeB)
if !ok {
t.Fatal("断言错误 TypeB")
}
// 使用array
},
},
}
以上是你需要的翻译内容。
英文:
Type assertions ( https://tour.golang.org/methods/15 ) is what you need when you have an interface{}
and want to access to the concrete value:
type TestArgs struct {
name string
customAssert func(interface{})
}
// Define the test case with TestArgs.
tests := []TestArgs{
{
name: "Test A",
customAssert: func(param interface{}) {
// Some code
array, ok := param.([]*pb.TypeA)
if !ok {
t.Fatal("assertion error TypeA")
}
// use array
},
},
{
name: "Test B",
customAssert: func(param interface{}) {
// Some code
array, ok := param.([]*pb.TypeB)
if !ok {
t.Fatal("assertion error TypeB")
}
// use array
},
},
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论