我正在使用Go的这个版本:
$ go version
go version go1.18 windows/amd64
当struct A
只有一个字段,而B
有两个或两个以上的字段时,结果会有所不同,而当参数类型为interface时,结果会发生变化.
我不确定这是不是一个错误:
package main
import (
"fmt"
)
func main() {
a := A{}
m("A", a, SetAI(&a))
b := B{}
m("B", b, SetBI(&b))
}
type A struct {
I int
S string
}
type B struct {
I int
}
func SetAI(a *A) A {
a.I = 10
return *a
}
func SetBI(b *B) B {
b.I = 10
return *b
}
func m(name string, arg1, arg2 interface{}) {
fmt.Println(name+":", arg1, arg2)
}
我期望这个输出:
A: {10} {10}
B: {10} {10}
相反,我得到了这个:
A: {0 } {10 }
B: {10} {10}