code: func (d *Database) PrimaryKey(src interface{}) (name string, pk int64, err error) {
  	data, err := getFields(reflect.TypeOf(src))
  	if err != nil {
  		return "", 0, err
  	}
  
  	if data.pk == "" {
  		return "", 0, nil
  	}
  
  	name = data.pk
  	field := reflect.ValueOf(src).Elem().Field(data.fields[name].index)
  	switch field.Type().Kind() {
  	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
  		pk = field.Int()
  	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
  		pk = int64(field.Uint())
  	default:
  		return "", 0, fmt.Errorf("meddler found field %s which is marked as the primary key, but is not an integer type", name)
  	}
  
  	return name, pk, nil
  }
docs: // PrimaryKey returns the name and value of the primary key field. The name
  // is the empty string if there is not primary key field marked.