使用以下代码创建指向切片的指针:


register := make(Register)

s := make([]bool, len(arr)) // create addressable slice value s.

register[true] = &s

您可以使用 来消除变量声明,但此方法不会减少代码行数,而是添加另一个映射索引操作。new


register := make(Register)

register[true] = new([]bool)

*register[true] = make([]bool, len(arr))

声明一个函数以将赋值移动到一行:


func makeSlice(n int) *[]bool {

    s := make([]bool, len(arr))

    return &s

}


...


register := Register{true: makeSlice(len(arr))}

由于映射键有两个可能的值(true 和 false),因此可以使用结构而不是映射来简化代码:


type Register struct {

    t, f []bool

}


register := Register{t: make([]bool, len(arr))}

中的结构字段是可寻址的,因此您可以使用 来获取 .register&register.t*[]bool


此主题的变体是使用数组:


type Register [2][]bool

register := Register{1: make([]bool, len(arr))}

如果仅修改切片元素而不修改切片值,则无需使用指向切片的指针。


type Register map[bool][]bool

register := make(Register)

register[true] := make([]bool, len(arr))

如果确实修改了切片值,则 可能会更有效且更易于使用。修改切片值时,应用程序需要赋回地图,但要消除间接寻址。map[bool][]bool