将2D切片传递给Golang函数参数

将2D切片传递给Golang函数参数,go,Go,我正在尝试从stdin扫描一个矩阵,并使用下面的代码简单地打印它 package main import ( "fmt" ) func print2D(arr [][]int) { for i:=0; i< len(arr); i++{ for j := 0; j< len(arr[0]); j++{ fmt.Printf("%d ", arr[i][j]) } fmt.Println()

我正在尝试从stdin扫描一个矩阵,并使用下面的代码简单地打印它

package main

import (
    "fmt"
)

func print2D(arr [][]int) {
    for i:=0; i< len(arr); i++{
        for j := 0; j< len(arr[0]); j++{
            fmt.Printf("%d ", arr[i][j])
        }
        fmt.Println()
    }
}

func main() {
    var arr [6][6]int
    for i:= 0 ; i < 6 ;i++ {
        for j := 0; j< 6; j++{
            fmt.Scanf("%d", &arr[i][j])
        }
    }
    print2D(arr[:])
}
主程序包
进口(
“fmt”
)
func print2D(arr[][]int){
对于i:=0;i
它抛出以下错误

./main.go:23:无法将arr[:](类型[][6]int)用作中的类型[][]int print2D的参数


有没有一种方法可以传递2D切片而不在函数参数中定义大小

尝试将数据直接写入切片,然后将其传递给函数。请记住,数组和切片是不同的类型。此外,类型
[3]int
也不同于
[4]int
(大小问题)

主程序包
进口(
“fmt”
)
func print2D(arr[][]int){
对于i:=0;i
出于某种原因,您需要使用数组吗?如果从切片开始,没有问题。@JimB在这种情况下,您能举一个如何使用2d切片的示例吗?如果矩阵维数为3x4怎么办?什么是“矩阵定义”?如果类型为
[3][4]int
,则需要使用该类型。如果类型为
[]int
,则它们可以有任何维度。此外,当您将数组作为参数传递给函数/方法时,您复制整个数组,即在函数/方法内部修改其副本。如果使用slice,则可以动态修改它,而无需额外的副本。经验法则是只要有可能,就将路径切片作为参数。