drb56625 2017-10-18 11:50
浏览 163
已采纳

为什么不能在Go中将变量作为多维数组大小放置?

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

  • 写回答

1条回答 默认 最新

  • duanma8207 2017-10-18 11:54
    关注

    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
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测