2016-02-12 1 views
-1

J'ai une structure d'utilisateur qui correspond à une entité. Comment puis-je ajouter une nouvelle propriété active et définir la valeur par défaut sur true?Comment puis-je ajouter une nouvelle propriété booléenne à une structure Golang et définir la valeur par défaut sur true?

Puis-je également définir la valeur de cette propriété sur true pour toutes les entités existantes par une méthode simple? Questions supplémentaires: Je ne comprends pas très bien la syntaxe de la structure. Que représentent les trois colonnes? Qu'est-ce que les chaînes JSON ont autour d'eux?

+2

A propos de la 'JSON: chose "nom"': http://stackoverflow.com/questions/10858787/what-are-the-uses-for-tags -in-go – TheHippo

Répondre

0

Vous devez définir la valeur par défaut comme true au moment où vous passez le type struct à une variable, mais cela signifie que vous devez étendre cette structure avec un nouveau champ Active.

type User struct { 
    Id    int64  `json:"id"` 
    Name   string `json:"name"` 
    Active   bool 
} 

user := User{1, "John", true} 

json:"id" signifie que vous mappez le champ objet décodé JSON au champ id dans votre type struct. Pratiquement, vous désérialisez la chaîne JSON dans des champs d'objets que vous pouvez ensuite mapper à leur champ spécifique à l'intérieur de la structure.

1
//You can't change declared type. 
type User struct { 
    Id    int64  `json:"id"` 
    Name   string `json:"name"` 
} 
//Instead you construct a new one embedding existent 
type ActiveUser struct { 
    User 
    Active bool 
} 
//you instantiate type literally 
user := User{1, "John"} 
//and you can provide constructor for your type 
func MakeUserActive(u User) ActiveUser { 
    auser := ActiveUser{u, true} 
    return auser 
} 
activeuser := MakeUserActive(user) 

Vous pouvez voir cela fonctionne https://play.golang.org/p/UU7RAn5RVK

+0

Je pense que plus idiomatique serait 'NewUser', avec' Active' mis à true quand c'est la valeur par défaut et fournir une méthode 'Deactivate()'. –