As far as I can tell, they're asking for a way for `var help`/`var fish` etc. to get updated alongside the attribute `i_t.arg` in the update methods.
This example accomplishes this.
https://go.dev/play/p/7y5COCLU5EP

Do note that it crashes and burns if the pointer is not of the expected type, and type checks/type switches could be used to check the underlying type before use. Or store it separately. Or just avoid weak typing altogether, if possible.

On 5/24/25 10:48, 'Brian Candler' via golang-nuts wrote:
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
        <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 <mailto: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 <https:// groups.google.com/d/msgid/golang-nuts/b6f2f0b7-4a8e-4ec4- aa77-10bd07312b39n%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/85c7a046-b279-4731-9a55-d82e2da4aae6%40gmail.com.

Reply via email to