2 回答

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊
使用以下代碼創(chuàng)建指向切片的指針:
register := make(Register)
s := make([]bool, len(arr)) // create addressable slice value s.
register[true] = &s
您可以使用 來消除變量聲明,但此方法不會(huì)減少代碼行數(shù),而是添加另一個(gè)映射索引操作。new
register := make(Register)
register[true] = new([]bool)
*register[true] = make([]bool, len(arr))
聲明一個(gè)函數(shù)以將賦值移動(dòng)到一行:
func makeSlice(n int) *[]bool {
s := make([]bool, len(arr))
return &s
}
...
register := Register{true: makeSlice(len(arr))}
由于映射鍵有兩個(gè)可能的值(true 和 false),因此可以使用結(jié)構(gòu)而不是映射來簡(jiǎn)化代碼:
type Register struct {
t, f []bool
}
register := Register{t: make([]bool, len(arr))}
中的結(jié)構(gòu)字段是可尋址的,因此您可以使用 來獲取 .register®ister.t*[]bool
此主題的變體是使用數(shù)組:
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))
如果確實(shí)修改了切片值,則 可能會(huì)更有效且更易于使用。修改切片值時(shí),應(yīng)用程序需要賦回地圖,但要消除間接尋址。map[bool][]bool

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊
另一個(gè)選項(xiàng)是使用函數(shù):new
package main
import "fmt"
func main() {
type Register map[bool]*[]bool
register := make(Register)
register[true] = new([]bool)
// main.Register{true:(*[]bool)(0xc000004078)}
fmt.Printf("%#v\n", register)
}
https://golang.org/pkg/builtin#new
- 2 回答
- 0 關(guān)注
- 120 瀏覽
添加回答
舉報(bào)