I have this which returns a string representation of a function signature:
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)
}
however, some parameter and return types return empty strings, so I put in "" which isn't really ideal. Is there some way to retrieve the names/types of the input and return values?
Aucun commentaire:
Enregistrer un commentaire