2017-05-04 2 views

Répondre

1

Non, il n'y a pas vraiment de setter multi-propriétés équivalent.

EDIT:

Peut-être avec la réflexion que vous pourriez faire quelque chose comme:

updates := user := User{ 
    Email: "[email protected]", 
} 
//via reflection (pseudo code) 
for each field in target object { 
    if updates.field is not zero value{ 
    set target.field = updates.field 
    } 
} 

La partie de réflexion pourrait être pris en compte dans une fonction updateFields(dst, src interface{}), mais je voudrais généralement dire la complexité ne vaut pas la des économies. Juste quelques lignes de paramètres un par un.

+0

peut-il être fait avec réflexion? par exemple, j'ai une liste de champs qui devraient être mis à jour et besoin d'aller le jeter et faire des choses –

+1

Certainement, mais ce serait moche. Voir éditer. – captncraig

+0

merci. Je sais, c'est moche et je ne l'aime vraiment pas. C'est à cause de https://github.com/astaxie/beego/issues/2602 et je ne sais pas comment l'éviter –

0

Voulez-vous dire par là?

package main 

import (
    "fmt" 
) 

type User struct { 
    Id uint64 
    Email string 
} 

func main() { 
    user := User{ 
     Id: 1, 
     Email: "[email protected]", 
    } 
    fmt.Println(user) 

    user = User{ 
     Id: 2, 
     Email: "[email protected]", 
    } 
    fmt.Println(user) 
} 

https://play.golang.org/p/5-ME3p_JaV

+0

Non, je m'attends à quelque chose comme ça https://play.golang.org/p/wwANZM76JB –

+0

Vous pouvez le faire si vous ajoutez 'Name: user1.Name' @OleksandrSavchenko? – Carpetsmoker

+0

Ce n'est pas pareil –

1

Ce n'est pas la même chose, mais vous pouvez utiliser la fonctionnalité de retour multivaleur pour les mettre en une ligne.

https://play.golang.org/p/SGuOhdJieW

package main 

import (
    "fmt" 
) 

type User struct { 
    Id uint64 
    Email string 
Name string 
} 

func main() { 
    user := User{ 
     Id: 1, 
     Email: "[email protected]", 
    Name: "Peter", 
    } 
    fmt.Println(user) 

    user.Id, user.Email = 2, "[email protected]" 
    fmt.Println(user) // user.Name = "Peter" 

} 
+0

Merci! On dirait bien, mais pour beaucoup de propriétés, il semble moche –

+0

Vous pourriez envelopper dans une fonction – RayfenWindspear