PiMaker
PiMaker

Reputation: 519

Golang: How to change struct field value in slice of interfaces

Problem in Playground: https://play.golang.org/p/UKB8f4qGsM

I have a slice of interfaces, I know for sure which type they have (in reality i don't so I'd have to type switch it, but I left that out for clarity). How can I assign a value to a field in the struct behind the interface? The type assertion seems to take away the reference.

I also tried using pointers, that too doesn't work though, mostly because I can't type assert then (type *inter cannot be type asserted) and when I dereference it, it kinda makes it pointless to even have...

I'm not that experienced in Go, I would appreciate every help I can get.

Upvotes: 2

Views: 2311

Answers (1)

JimB
JimB

Reputation: 109331

You can't change the value stored in the interface, you need to use a pointer to the value you want to change:

for i := 0; i < 5; i++ {
    slice = append(slice, &b{a: a{name: "Tom"}})
}

for i, _ := range slice {
    x := slice[i].(*b)
    x.name = "Tim"
}

Upvotes: 1

Related Questions