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.

Reply via email to