Ошибка
Ошибка возникает при попытке определить константу из переменной.В Go константы должны быть определены как литералы или выражения, построенные из других констант.Ваши x
и y
определяются по-разному в зависимости от входа функции Pic
.Как правило, константы определяются во время компиляции.
Например, в Go хорошо следующее:
const w = 100
const x = 200
const y = w + x
const z = x + y + 300
Но следующее не так:
var x = 100
const y = x + 10
иэтот второй пример, по сути, происходит в вашем коде, поскольку dx
и dy
различаются в зависимости от ввода в функцию Pic
.
Если вы используете JavaScript, который также имеет const
, это может показаться странным поведением.В JavaScript константа - это просто переменная, которую нельзя изменить после объявления.В Go константа более постоянна, чем в JS.
Ознакомьтесь с этим постом, чтобы узнать больше о константах в Go: https://blog.golang.org/constants
Создание массива
Размеры массива имеют ограничения, аналогичные постоянным значениям в Go.В этом примере, если вы попытаетесь установить размер массива равным dx
или dy
, вы получите ошибку:
с константой, не связанной с массивом, dx
Таким образом, вам придется использовать слайс в этом примере.Простейшим способом будет определить ваш срез длиной dy
, например:
pic := make([][]uint8, dy)