How to pass interface of struct type by reference in golang?
10,633
So you're using an interface, and you need some sort of guarantee that you can set the value of a member of the struct? Sounds like you should make that guarantee part of the interface, so something like:
type Settable interface {
SetVal(val int)
}
func (c *check) SetVal(val int) {
c.Val = val
}
func some(te Settable) {
te.SetVal(20)
}
type check struct {
Val int
}
func main() {
a := check{Val: 100}
p := &a
some(p)
fmt.Println(*p)
}
Author by
re3el
Updated on June 14, 2022Comments
-
re3el almost 2 years
I need to pass an interface of a struct type by reference as shown below. Since, I can't use pointers of interface to struct type variables, how should I change the below code to modify
te
value to10
?.package main import ( "fmt" ) func another(te *interface{}) { *te = check{Val: 10} } func some(te *interface{}) { *te = check{Val: 20} another(te) } type check struct { Val int } func main() { a := check{Val: 100} p := &a fmt.Println(*p) some(p) fmt.Println(*p) }
Thanks!
P.S I have read that passing pointers to interfaces is not a very good practice. Kindly let me know what could be a better way to handle it