sql.go
func (uuid *UUID) Scan(src interface{}) error {
	switch src := src.(type) {
	case nil:
		return nil

	case string:
		// if an empty UUID comes from a table, we return a null UUID
		if src == "" {
			return nil
		}

		// see Parse for required string format
		u, err := Parse(src)
		if err != nil {
			return fmt.Errorf("Scan: %v", err)
		}

		*uuid = u

	case []byte:
		// if an empty UUID comes from a table, we return a null UUID
		if len(src) == 0 {
			return nil
		}

		// assumes a simple slice of bytes if 16 bytes
		// otherwise attempts to parse
		if len(src) != 16 {
			return uuid.Scan(string(src))
		}
		copy((*uuid)[:], src)

	default:
		return fmt.Errorf("Scan: unable to scan type %T into UUID", src)
	}

	return nil
}
func (uuid *UUID) Scan(src interface{}) error {
	switch src := src.(type) {
	case nil:
		return nil

	case string:
		// if an empty UUID comes from a table, we return a null UUID
		if src == "" {
			return nil
		}

		// see Parse for required string format
		u, err := Parse(src)
		if err != nil {
			return fmt.Errorf("Scan: %v", err)
		}

		*uuid = u

	case []byte:
		// if an empty UUID comes from a table, we return a null UUID
		if len(src) == 0 {
			return nil
		}

		// assumes a simple slice of bytes if 16 bytes
		// otherwise attempts to parse
		if len(src) != 16 {
			return uuid.Scan(string(src))
		}
		copy((*uuid)[:], src)

	default:
		return fmt.Errorf("Scan: unable to scan type %T into UUID", src)
	}

	return nil
}
func ( uuid * UUID ) Scan ( src interface { } ) error { switch src := src . ( type ) { case nil : return nil case string : // if an empty UUID comes from a table, we return a null UUID if src == " " { return nil } // see Parse for required string format u , err := Parse ( src ) if err != nil { return fmt . Errorf ( " " , err ) } * uuid = u case [ ] byte : // if an empty UUID comes from a table, we return a null UUID if len ( src ) == 0 { return nil } // assumes a simple slice of bytes if 16 bytes // otherwise attempts to parse if len ( src ) != 16 { return uuid . Scan ( string ( src ) ) } copy ( ( * uuid ) [ : ] , src ) default : return fmt . Errorf ( " " , src ) } return nil }
// Scan implements sql.Scanner so UUIDs can be read from databases transparently
// Currently, database types that map to string and []byte are supported. Please
// consult database-specific driver documentation for matching types.
Scan implements sql . Scanner so UUIDs can be read from databases transparently Currently database types that map to string and [] byte are supported . Please consult database - specific driver documentation for matching types .