2015-04-15 2 views
0

Что делает это «лишнее» поле gorm:"primary_key" делать при создании структуры?Дополнительная ценность в поле в struct golang

type Model struct { 
    ID  uint `gorm:"primary_key"` 
    CreatedAt time.Time 
    UpdatedAt time.Time 
    DeletedAt *time.Time 
} 
+1

См [это] (http://stackoverflow.com/questions/10858787/what-are-the-uses-for-tags-in-go) пост для общего объяснения. Ответ Лео Корреа дает конкретное значение для этого конкретного тега – IamNaN

ответ

1

Это тег, используемый gorm пакета, чтобы пакет знает, что поле будет использоваться в качестве первичного ключа

См https://github.com/jinzhu/gorm/blob/b9a39be9c5e77bb0bfebd516114a8a4d605c645a/model_struct.go#L135-L139

gormSettings := parseTagSetting(field.Tag.Get("gorm")) 
if _, ok := gormSettings["PRIMARY_KEY"]; ok { 
    field.IsPrimaryKey = true 
    modelStruct.PrimaryFields = append(modelStruct.PrimaryFields, field) 
} 
0

Те, что я называю «аннотации 'они используются различными пакетами (в данном случае gorm), чтобы предоставить дополнительную информацию о том, как обращаться с типом. Чаще всего вы видите их на объектах передачи данных (например, json и xml), оба пакета требуют их в большинстве случаев использования.

В этом случае вы рассказываете gorm это поле является первичным ключом. С беглого взгляда на эти пакеты docs это для реляционного моделирования (например, настройка типов для сопоставления с rmdb или что-то в этом роде), поэтому здесь имеет смысл видеть такие вещи, как nullable, pk или fk.

Смежные вопросы