1

Recently, I've been interested in machine learning more specifically, machine learning with images, but to do that, I need to be able to process images. I want to have a more thorough understanding of how image processing libraries work along the way, so I have decided to make my own library for reading images that I can understand. However, I seem to have an issue when it comes to reading the SIZE of an image, as this error pops up when I try to compile:

 ./imageProcessing.go:33:11: non-constant array bound Size

This is my code:

package main

import (
 // "fmt"
 // "os"
)

// This function reads a dimension of an image you would use it like readImageDimension("IMAGENAME.PNG", "HEIGHT")

 func readImageDimension(path string, which string) int{

var dimensionyes int

if(which == "" || which == " "){
    panic ("You have not entered which dimension you want to have.")
} else if (which == "Height" || which == "HEIGHT" || which == "height" || which == "h" || which =="H"){
    //TODO: Insert code for reading the Height of the image

    return dimensionyes

} else if (which == "Width" || which == "WIDTH" || which == "width" || which == "w" || which =="W"){
    //TODO: Insert code for reading the Width of the image

    return dimensionyes

} else {
    panic("Dimension type not recognized.")
    }
 }

 func addImage(path string, image string, Height int, Width int){
    var Size int
    Size = Width * Height
    var Pix [Size][3]int
 }

func main() {


}

I'm just beginning programming with Go, so I'm sorry if this question sounds nooby

icza
  • 389,944
  • 63
  • 907
  • 827

1 Answers1

7

Because Go is a statically typed language, which means types of variables need to be known at compile-time.

Arrays in Go are fixed sizes: once you create an array in Go, you can't change its size later on. This is so to an extent that the length of an array is part of the array type (this means the types [2]int and [3]int are 2 distinct types).

The value of a variable is generally not known at compile-time, so using that as the array length, the type would not be known at compile time, hence it is not allowed.

Read related questions: How do I find the size of the array in go

If you don't know the size at compile time, use slices instead of arrays (there are other reasons to use slices too).

For example this code:

func addImage(path string, image string, Height int, Width int){
    var Size int
    Size = Width * Height
    var Pix [Size][3]int
    // use Pix
}

Can be transformed to create and use a slice like this:

func addImage(path string, image string, Height int, Width int){
    var Size int
    Size = Width * Height
    var Pix = make([][3]int, Size)
    // use Pix
}
icza
  • 389,944
  • 63
  • 907
  • 827