我目前正在努力完成出色的“围棋之旅”。我使用以下解决方案完成了其中一项练习(#45):
func Pic(dx, dy int) [][]uint8 { pic := make([][]uint8, dy) /* type declaration */ for i := range pic { pic[i] = make([]uint8, dx) /* again the type? */ for j := range pic[i] { pic[i][j] = uint8((i+j)/2) } } return pic }
我不明白为什么我必须使用两次make该uint8类型的语句(请参见摘要中的注释)。这似乎是多余的,但我不知道该怎么做。
make
uint8
Go中没有其他方法可以做到这一点。
是的,我同意这很冗长,但有必要。第二个make()语句完全独立于第一个。可以争论的是,编译器应该能够从推断类型pic[i],但此时还不行。
pic[i]
另一点:如果在第二种情况下省略了类型,make()语句的外观如何?仍然需要make()来进行实际分配并能够指定所需的len / capacity。
附带说明,您混合了切片长度。练习指出,顶层切片应具有length dy,而不是dx您在代码中输入的长度。
dy
dx