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 [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/golang-nuts/bd06269a-7b6d-442a-a3f2-9d4f0020ac90n%40googlegroups.com.