code: func funcArgsFromType(t reflect.Type) (in []*Parameter, variadic *Parameter, out []*Parameter, err error) {
  	nin := t.NumIn()
  	if t.IsVariadic() {
  		nin--
  	}
  	var p *Parameter
  	for i := 0; i < nin; i++ {
  		p, err = parameterFromType(t.In(i))
  		if err != nil {
  			return
  		}
  		in = append(in, p)
  	}
  	if t.IsVariadic() {
  		p, err = parameterFromType(t.In(nin).Elem())
  		if err != nil {
  			return
  		}
  		variadic = p
  	}
  	for i := 0; i < t.NumOut(); i++ {
  		p, err = parameterFromType(t.Out(i))
  		if err != nil {
  			return
  		}
  		out = append(out, p)
  	}
  	return
  }
docs: // t's Kind must be a reflect.Func.