driver/converter.go
func convertNvLob(idx int, f *p.ParameterField, v interface{}) (driver.Value, error) {

	if v == nil {
		return v, nil
	}

	switch v := v.(type) {
	case Lob:
		if v.rd == nil {
			return nil, fmt.Errorf("lob error: initial reader %[1]T %[1]v", v)
		}
		f.SetLobReader(v.rd)
		return fmt.Sprintf("<lob %d", idx), nil
	case *Lob:
		if v.rd == nil {
			return nil, fmt.Errorf("lob error: initial reader %[1]T %[1]v", v)
		}
		f.SetLobReader(v.rd)
		return fmt.Sprintf("<lob %d", idx), nil
	case NullLob:
		if !v.Valid {
			return nil, nil
		}
		if v.Lob.rd == nil {
			return nil, fmt.Errorf("lob error: initial reader %[1]T %[1]v", v)
		}
		f.SetLobReader(v.Lob.rd)
		return fmt.Sprintf("<lob %d", idx), nil
	case *NullLob:
		if !v.Valid {
			return nil, nil
		}
		if v.Lob.rd == nil {
			return nil, fmt.Errorf("lob error: initial reader %[1]T %[1]v", v)
		}
		f.SetLobReader(v.Lob.rd)
		return fmt.Sprintf("<lob %d", idx), nil
	}

	rv := reflect.ValueOf(v)

	switch rv.Kind() {

	case reflect.Ptr:
		// indirect pointers
		if rv.IsNil() {
			return nil, nil
		}
		return convertNvLob(idx, f, rv.Elem().Interface())
	}

	return nil, fmt.Errorf("unsupported lob conversion type error %[1]T %[1]v", v)
}
func convertNvLob(idx int, f *p.ParameterField, v interface{}) (driver.Value, error) {

	if v == nil {
		return v, nil
	}

	switch v := v.(type) {
	case Lob:
		if v.rd == nil {
			return nil, fmt.Errorf("lob error: initial reader %[1]T %[1]v", v)
		}
		f.SetLobReader(v.rd)
		return fmt.Sprintf("<lob %d", idx), nil
	case *Lob:
		if v.rd == nil {
			return nil, fmt.Errorf("lob error: initial reader %[1]T %[1]v", v)
		}
		f.SetLobReader(v.rd)
		return fmt.Sprintf("<lob %d", idx), nil
	case NullLob:
		if !v.Valid {
			return nil, nil
		}
		if v.Lob.rd == nil {
			return nil, fmt.Errorf("lob error: initial reader %[1]T %[1]v", v)
		}
		f.SetLobReader(v.Lob.rd)
		return fmt.Sprintf("<lob %d", idx), nil
	case *NullLob:
		if !v.Valid {
			return nil, nil
		}
		if v.Lob.rd == nil {
			return nil, fmt.Errorf("lob error: initial reader %[1]T %[1]v", v)
		}
		f.SetLobReader(v.Lob.rd)
		return fmt.Sprintf("<lob %d", idx), nil
	}

	rv := reflect.ValueOf(v)

	switch rv.Kind() {

	case reflect.Ptr:
		// indirect pointers
		if rv.IsNil() {
			return nil, nil
		}
		return convertNvLob(idx, f, rv.Elem().Interface())
	}

	return nil, fmt.Errorf("unsupported lob conversion type error %[1]T %[1]v", v)
}
// Lob