func GValue(v interface{}) (gvalue *Value, err error) {
	if v == nil {
		val, err := ValueInit(TYPE_POINTER)
		if err != nil {
			return nil, err
		}
		val.SetPointer(uintptr(unsafe.Pointer(nil)))
		return val, nil
	}

	switch e := v.(type) {
	case bool:
		val, err := ValueInit(TYPE_BOOLEAN)
		if err != nil {
			return nil, err
		}
		val.SetBool(e)
		return val, nil

	case int8:
		val, err := ValueInit(TYPE_CHAR)
		if err != nil {
			return nil, err
		}
		val.SetSChar(e)
		return val, nil

	case int64:
		val, err := ValueInit(TYPE_INT64)
		if err != nil {
			return nil, err
		}
		val.SetInt64(e)
		return val, nil

	case int:
		val, err := ValueInit(TYPE_INT)
		if err != nil {
			return nil, err
		}
		val.SetInt(e)
		return val, nil

	case uint8:
		val, err := ValueInit(TYPE_UCHAR)
		if err != nil {
			return nil, err
		}
		val.SetUChar(e)
		return val, nil

	case uint64:
		val, err := ValueInit(TYPE_UINT64)
		if err != nil {
			return nil, err
		}
		val.SetUInt64(e)
		return val, nil

	case uint:
		val, err := ValueInit(TYPE_UINT)
		if err != nil {
			return nil, err
		}
		val.SetUInt(e)
		return val, nil

	case float32:
		val, err := ValueInit(TYPE_FLOAT)
		if err != nil {
			return nil, err
		}
		val.SetFloat(e)
		return val, nil

	case float64:
		val, err := ValueInit(TYPE_DOUBLE)
		if err != nil {
			return nil, err
		}
		val.SetDouble(e)
		return val, nil

	case string:
		val, err := ValueInit(TYPE_STRING)
		if err != nil {
			return nil, err
		}
		val.SetString(e)
		return val, nil

	case *Object:
		val, err := ValueInit(TYPE_OBJECT)
		if err != nil {
			return nil, err
		}
		val.SetInstance(uintptr(unsafe.Pointer(e.GObject)))
		return val, nil

	default:
		/* Try this since above doesn't catch constants under other types */
		rval := reflect.ValueOf(v)
		switch rval.Kind() {
		case reflect.Int8:
			val, err := ValueInit(TYPE_CHAR)
			if err != nil {
				return nil, err
			}
			val.SetSChar(int8(rval.Int()))
			return val, nil

		case reflect.Int16:
			return nil, errors.New("Type not implemented")

		case reflect.Int32:
			return nil, errors.New("Type not implemented")

		case reflect.Int64:
			val, err := ValueInit(TYPE_INT64)
			if err != nil {
				return nil, err
			}
			val.SetInt64(rval.Int())
			return val, nil

		case reflect.Int:
			val, err := ValueInit(TYPE_INT)
			if err != nil {
				return nil, err
			}
			val.SetInt(int(rval.Int()))
			return val, nil

		case reflect.Uintptr, reflect.Ptr:
			val, err := ValueInit(TYPE_POINTER)
			if err != nil {
				return nil, err
			}
			val.SetPointer(rval.Pointer())
			return val, nil
		}
	}

	return nil, errors.New("Type not implemented")
}
func GValue(v interface{}) (gvalue *Value, err error) {
	if v == nil {
		val, err := ValueInit(TYPE_POINTER)
		if err != nil {
			return nil, err
		}
		val.SetPointer(uintptr(unsafe.Pointer(nil)))
		return val, nil
	}

	switch e := v.(type) {
	case bool:
		val, err := ValueInit(TYPE_BOOLEAN)
		if err != nil {
			return nil, err
		}
		val.SetBool(e)
		return val, nil

	case int8:
		val, err := ValueInit(TYPE_CHAR)
		if err != nil {
			return nil, err
		}
		val.SetSChar(e)
		return val, nil

	case int64:
		val, err := ValueInit(TYPE_INT64)
		if err != nil {
			return nil, err
		}
		val.SetInt64(e)
		return val, nil

	case int:
		val, err := ValueInit(TYPE_INT)
		if err != nil {
			return nil, err
		}
		val.SetInt(e)
		return val, nil

	case uint8:
		val, err := ValueInit(TYPE_UCHAR)
		if err != nil {
			return nil, err
		}
		val.SetUChar(e)
		return val, nil

	case uint64:
		val, err := ValueInit(TYPE_UINT64)
		if err != nil {
			return nil, err
		}
		val.SetUInt64(e)
		return val, nil

	case uint:
		val, err := ValueInit(TYPE_UINT)
		if err != nil {
			return nil, err
		}
		val.SetUInt(e)
		return val, nil

	case float32:
		val, err := ValueInit(TYPE_FLOAT)
		if err != nil {
			return nil, err
		}
		val.SetFloat(e)
		return val, nil

	case float64:
		val, err := ValueInit(TYPE_DOUBLE)
		if err != nil {
			return nil, err
		}
		val.SetDouble(e)
		return val, nil

	case string:
		val, err := ValueInit(TYPE_STRING)
		if err != nil {
			return nil, err
		}
		val.SetString(e)
		return val, nil

	case *Object:
		val, err := ValueInit(TYPE_OBJECT)
		if err != nil {
			return nil, err
		}
		val.SetInstance(uintptr(unsafe.Pointer(e.GObject)))
		return val, nil

	default:
		
		rval := reflect.ValueOf(v)
		switch rval.Kind() {
		case reflect.Int8:
			val, err := ValueInit(TYPE_CHAR)
			if err != nil {
				return nil, err
			}
			val.SetSChar(int8(rval.Int()))
			return val, nil

		case reflect.Int16:
			return nil, errors.New("Type not implemented")

		case reflect.Int32:
			return nil, errors.New("Type not implemented")

		case reflect.Int64:
			val, err := ValueInit(TYPE_INT64)
			if err != nil {
				return nil, err
			}
			val.SetInt64(rval.Int())
			return val, nil

		case reflect.Int:
			val, err := ValueInit(TYPE_INT)
			if err != nil {
				return nil, err
			}
			val.SetInt(int(rval.Int()))
			return val, nil

		case reflect.Uintptr, reflect.Ptr:
			val, err := ValueInit(TYPE_POINTER)
			if err != nil {
				return nil, err
			}
			val.SetPointer(rval.Pointer())
			return val, nil
		}
	}

	return nil, errors.New("Type not implemented")
}
func GValue ( v interface { } ) ( gvalue * Value , err error ) { if v == nil { val , err := ValueInit ( TYPE_POINTER ) if err != nil { return nil , err } val . SetPointer ( uintptr ( unsafe . Pointer ( nil ) ) ) return val , nil } switch e := v . ( type ) { case bool : val , err := ValueInit ( TYPE_BOOLEAN ) if err != nil { return nil , err } val . SetBool ( e ) return val , nil case int8 : val , err := ValueInit ( TYPE_CHAR ) if err != nil { return nil , err } val . SetSChar ( e ) return val , nil case int64 : val , err := ValueInit ( TYPE_INT64 ) if err != nil { return nil , err } val . SetInt64 ( e ) return val , nil case int : val , err := ValueInit ( TYPE_INT ) if err != nil { return nil , err } val . SetInt ( e ) return val , nil case uint8 : val , err := ValueInit ( TYPE_UCHAR ) if err != nil { return nil , err } val . SetUChar ( e ) return val , nil case uint64 : val , err := ValueInit ( TYPE_UINT64 ) if err != nil { return nil , err } val . SetUInt64 ( e ) return val , nil case uint : val , err := ValueInit ( TYPE_UINT ) if err != nil { return nil , err } val . SetUInt ( e ) return val , nil case float32 : val , err := ValueInit ( TYPE_FLOAT ) if err != nil { return nil , err } val . SetFloat ( e ) return val , nil case float64 : val , err := ValueInit ( TYPE_DOUBLE ) if err != nil { return nil , err } val . SetDouble ( e ) return val , nil case string : val , err := ValueInit ( TYPE_STRING ) if err != nil { return nil , err } val . SetString ( e ) return val , nil case * Object : val , err := ValueInit ( TYPE_OBJECT ) if err != nil { return nil , err } val . SetInstance ( uintptr ( unsafe . Pointer ( e . GObject ) ) ) return val , nil default : /* Try this since above doesn't catch constants under other types */ rval := reflect . ValueOf ( v ) switch rval . Kind ( ) { case reflect . Int8 : val , err := ValueInit ( TYPE_CHAR ) if err != nil { return nil , err } val . SetSChar ( int8 ( rval . Int ( ) ) ) return val , nil case reflect . Int16 : return nil , errors . New ( " " ) case reflect . Int32 : return nil , errors . New ( " " ) case reflect . Int64 : val , err := ValueInit ( TYPE_INT64 ) if err != nil { return nil , err } val . SetInt64 ( rval . Int ( ) ) return val , nil case reflect . Int : val , err := ValueInit ( TYPE_INT ) if err != nil { return nil , err } val . SetInt ( int ( rval . Int ( ) ) ) return val , nil case reflect . Uintptr , reflect . Ptr : val , err := ValueInit ( TYPE_POINTER ) if err != nil { return nil , err } val . SetPointer ( rval . Pointer ( ) ) return val , nil } } return nil , errors . New ( " " ) }
// GValue converts a Go type to a comparable GValue.  GValue()
// returns a non-nil error if the conversion was unsuccessful.
GValue converts a Go type to a comparable GValue . GValue () returns a non - nil error if the conversion was unsuccessful .