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

Reply via email to