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.