我有这个代码
package main
import (
"fmt"
)
type foo struct {
a int
b bool
}
type foos []foo
type bar struct {
foos
}
func newBar() *bar {
b := &bar{
foos: make([]foo, 3, 3),
}
for _, foo := range b.foos {
// didn't set b to true
foo.b = true
}
return b
}
func main() {
b := newBar()
fmt.Println(b)
// set b to true
b.foos[0].b = true
fmt.Println(b)
}
The Go Playground
如您所见,我想使用构造函数
bar
初始化newBar()
,但我希望将嵌入类型foo.b初始化为非零值,因此我使用for range语句进行了初始化,但是foo.b
仍然为假,所有其中。作为在主函数中使用此代码b.foos[0].b = true
的比较,它可以正常工作。那么我的代码有什么问题呢? 最佳答案
天哪,我在发布此问题后才意识到这一点,这是因为变量slot
是for loop
的本地变量。所以解决方案是:
for i, _ := range b.foos {
// now b is set to true
b.foos[i].b = true
}
关于go - 包含嵌入式结构片段的结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49610015/