I'm trying to write a program (see below) that passes a slice of structs to a function. One of the struct fields is an interface{} that sometimes will hold a boolean value and other times will hold a string value. To do this, I put either a bool or a string variable in the field.
What I want to happen is for the local variable to be assigned a value. But, what's happening instead is only the struct field is assigned the value. Here's the program: (also at https://go.dev/play/p/7y5COCLU5EP) package main import ( "fmt" ) type i_t struct { arg interface{} } func main() { var help bool = false var fish string = "init" var i = []i_t{{help}} var t = []i_t{{fish}} fmt.Printf("before: help = %t\tstruct = %t\n", help, i) change_bool1(i) fmt.Printf("after: help = %t\tstruct = %t\n", help, i) fmt.Println() fmt.Printf("before: fish = %s\tstruct = %s\n", fish, t) change_string1(t) fmt.Printf("after: fish = %s\tstruct = %s\n", fish, t) } func change_bool1(a []i_t) { a[0].arg = true } func change_string1(a []i_t) { a[0].arg = "fish" } It generates the following output: before: help = false struct = [{false}] after: help = false struct = [{true}] before: fish = init struct = [{init}] after: fish = init struct = [{fish}] You can see that the values of the variables aren't changing but the values of the struct fields are. Is there some way for both to change? Cordially, Jon Forrest -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/golang-nuts/bd06269a-7b6d-442a-a3f2-9d4f0020ac90n%40googlegroups.com.