包含struct

时间:2018-04-02 11:01:34

标签: go struct constructor

我有这段代码

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语句初始化但它没有&#39 ;按预期工作,foo.b仍然是假的,所有这些都是假的。在使用此代码b.foos[0].b = true的主函数中进行比较时,它可以正常工作。我的代码怎么了?

1 个答案:

答案 0 :(得分:1)

Omg,我在发布此问题后才意识到这一点,因为变量slotfor loop的本地变量。所以解决方案是:

for i, _ := range b.foos {
    // now b is set to true
    b.foos[i].b = true
}