使用以下代码创建指向切片的指针:
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®ister.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