Go 使用range for loop遍历所有方法
我有一个定义了方法的结构,我想遍历所有的方法。我可以使用接口{}或任何其他方法来实现这一点吗Go 使用range for loop遍历所有方法,go,Go,我有一个定义了方法的结构,我想遍历所有的方法。我可以使用接口{}或任何其他方法来实现这一点吗 type SomeStruct struct { m_boolVals []bool m_stringVals []string m_intVals []int64 } func (m *SomeStruct) GetBool() []bool { return m.m_boolVals } func (m *SomeStruct) GetString() []str
type SomeStruct struct {
m_boolVals []bool
m_stringVals []string
m_intVals []int64
}
func (m *SomeStruct) GetBool() []bool {
return m.m_boolVals
}
func (m *SomeStruct) GetString() []string {
return m_stringVals
}
func (m *SomeStruct) GetInts() []int64 {
return m_intVals
}
有没有办法实现下面的代码?所以基本上只有一个有价值的存在
fun SomeOtherFunc(ss *SomeStruct) []string {
var final_string []string
for _, handlerFunc := range(ss.GetBool, ss.GetString, ss.GetInts) {
generic_vals := handlerFunc()
if (len(generic_vals) > 0) {
for _, t_val := range(generic_vals) {
final_string = append(final_string , string(t_val))
}
break
}
}
return final_string
}
下面是一个示例,您可以使用反射迭代方法并调用每个方法,并将其结果转换为
字符串
:
func SomeOtherFunc(ss *SomeStruct) []string {
var result []string
v := reflect.ValueOf(ss)
for i := 0; i < v.NumMethod(); i++ {
for _, res := range v.Method(i).Call(nil) {
result = append(result, fmt.Sprint(res.Interface()))
}
}
return result
}
哪些输出(在上尝试):
您可以获取所有方法并对它们进行迭代,甚至使用反射调用它们。这对你合适吗?你有示例吗?这有一个使用reflection@user8351493获取方法名的示例-看起来不错。。。但我如何称呼它们(那些方法)?
fmt.Println(SomeOtherFunc(&SomeStruct{
m_boolVals: []bool{true, false},
m_stringVals: []string{"one", "two"},
m_intVals: []int64{1, 2, 3},
}))
[[true false] [1 2 3] [one two]]