Я делаю учебник по Голангу, и самое первое упражнение вызывает у меня головную боль.
В двух словах упражнение хочет, чтобы я динамически создал массив с размером dx * dy..
Это моя функция, которая получает dx
, dy
и возвращает массив [dx][dy]uint8
, который работает:
func Pic(dx, dy int) [][]uint8 {
resultArray := make([][]uint8, dx, dx)
for i := range resultArray {
fmt.Println(resultArray[i])
resultArray[i] = make([]uint8, dy, dy)
fmt.Println(resultArray)
for j := range resultArray[i] {
if (i+j)%30 <= 15 {
resultArray[i][j] = uint8(255)
}
}
}
return resultArray
}
Однако этот код, который использует for i, v := range x
, делает не работа:
func Pic(dx, dy int) [][]uint8 {
resultArray := make([][]uint8, dx, dx)
for i, ithRow := range resultArray {
ithRow = make([]uint8, dy, dy)
for j := range ithRow {
if (i+j)%30 <= 15 {
ithRow[j] = uint8(255)
}
}
}
return resultArray
}
Разве это не работает, потому что ithRow
является копией resultArray[i]
, но не ссылкой на нее?Если да, то почему это не ссылка на него (например, какова выгода или вариант использования его копирования)?