2015-11-21 22 views
9

Beh, conosco la necessità di tag in struct in golang e in che modo si accede alla riflessione in golang. Ma ho cercato e non sono riuscito a trovare una risposta affidabile alla domanda sul perché dovrei usare i tag sql nella struct mentre scrivevo struct per i risultati sql. Ho esplorato molti codice di esempio e le persone utilizzano sql:"index" nella struttura e sql:"primary_key" nella struttura.Perché usare i tag sql in struct in alcune librerie go come gorm?

Ora ho fatto l'indicizzazione nel livello del database, non è abbastanza? Devo usare anche sql:"index" per ottenere i risultati migliori? Così come ho definito l'attributo chiave primaria nel database dovrei specificare anche sql:"primary_key"?

Il mio codice sembra funzionare bene senza quelli. Voglio solo sapere i loro benefici e usi.

+1

Dove vedi questo codice di esempio? – saarrrr

+0

Bene, la maggior parte dell'ORM lo sta usando. Tutto a modo loro principalmente Gorm – sh0umik

risposta

6

penso si fa riferimento a una libreria ORM come gorm

In tal caso, i metadati come sql:"primary_key" o sql:"index" sarà solo dire al ORM per creare un indice durante il tentativo di installazione di tabelle o forse loro migrazione.

Un paio di esempi in gorm potrebbe essere: indici, chiavi primarie, chiavi esterne, relazioni many2many o quando si cerca di adattare uno schema in uscita nelle vostre gorm modelli, impostare il tipo in modo esplicito, come ad esempio:

type Address struct { 
    ID  int 
    Address1 string   `sql:"not null;unique"` // Set field as not nullable and unique 
    Address2 string   `sql:"type:varchar(100);unique"` 
    Post  sql.NullString `sql:"not null"` 
} 
+1

Inoltre, per molte librerie non-ORM (ad esempio [sqlx] (https://github.com/jmoiron/sqlx)), i tag struct vengono utilizzati per associare i nomi delle colonne ai campi struct - per esempio 'EmailAddress' nella tua fonte a' email_address' nel tuo DB. – elithrar

+0

con problemi con i campi ID univoco auto_increment con gorm e valori predefiniti. Semplicemente non lavorare sull'inserimento di una riga. –