code: func NewType(L *lua.LState, value interface{}) lua.LValue {
  	val := reflect.TypeOf(value)
  	ud := L.NewUserData()
  	ud.Value = val
  	ud.Metatable = getTypeMetatable(L, val)
  
  	return ud
  }
docs: // NewType returns a new type generator for the given value's type.
  //
  // When the returned lua.LValue is called, a new value will be created that is
  // dependent on value's type:
  //
  // If value is a channel, the first argument optionally specifies the channel's
  // buffer size (defaults to 1). The new channel is returned.
  //
  // If value is a map, a new map is returned.
  //
  // If value is a slice, the first argument optionally specifies the slices's
  // length (defaults to 0), and the second argument optionally specifies the
  // slice's capacity (defaults to the first argument). The new slice is returned.
  //
  // All other types return a new pointer to the zero value of value's type.