我有这个返回函数签名的字符串表示形式:
func getFuncSignature(v interface{}) string {
funcValue := reflect.ValueOf(v)
funcType := funcValue.Type()
name := funcType.Name()
// Function signature
var params []string
for i := 0; i < funcType.NumIn(); i++ {
nm := funcType.In(i).Name()
if strings.TrimSpace(nm) == "" {
nm = "<unk>" // <<<<<<<<<<<<<<<<<<<<< HERE 1
}
params = append(params, nm)
}
var returns []string
for i := 0; i < funcType.NumOut(); i++ {
nm := funcType.Out(i).Name()
if strings.TrimSpace(nm) == "" {
nm = "<unk>" // <<<<<<<<<<<<<<<<<<<<<< HERE 2
}
returns = append(returns, nm)
}
paramsStr := strings.Join(params, ", ")
returnsStr := strings.Join(returns, ", ")
if name != "" {
return fmt.Sprintf("(func %s(%s) => (%s))", name, paramsStr, returnsStr)
}
return fmt.Sprintf("(func(%s) => (%s))", paramsStr, returnsStr)
}
但是,某些参数和返回类型返回空字符串,因此我输入了“”,这并不是很理想。有没有办法检索输入和返回值的名称/类型?
Type.Name() 方法仅返回命名类型的非空字符串。
使用 Type.String() 获取任何类型的字符串表示形式。
var params []string
for i := 0; i < funcType.NumIn(); i++ {
params = append(params, funcType.In(i).String())
}
var returns []string
for i := 0; i < funcType.NumOut(); i++ {
returns = append(returns, funcType.Out(i).String())
}