Or you can use a setter method: https://go.dev/play/p/W9Cz2PO8NeK
On Saturday, 24 May 2025 at 03:39:34 UTC+1 Def Ceb wrote: > You're creating new copies of the values and modifying the copies, rather > than storing a reference and then modifying the original data through it. > You'd use *string and *bool there to have both change. > This would be somewhat tedious and involve a good amount of type casting > though, if you were to keep doing it with interfaces like this. It could > well be that you'd be better served by avoiding them in this instance. But > if you must, then learn to enjoy type switches. > > On Sat, May 24, 2025, 05:17 'jlfo...@berkeley.edu' via golang-nuts < > golan...@googlegroups.com> wrote: > >> 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...@googlegroups.com. >> To view this discussion visit >> https://groups.google.com/d/msgid/golang-nuts/bd06269a-7b6d-442a-a3f2-9d4f0020ac90n%40googlegroups.com >> >> <https://groups.google.com/d/msgid/golang-nuts/bd06269a-7b6d-442a-a3f2-9d4f0020ac90n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- 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/b6f2f0b7-4a8e-4ec4-aa77-10bd07312b39n%40googlegroups.com.