Go 如何传递一个二维数组,创建二维数组的切片

Go 如何传递一个二维数组,创建二维数组的切片,go,Go,我很难在func中传递2d字符串数组的一部分:这是我的游乐场 它说,不能在printBoard的参数中将board[:][:](type[][3]字符串)用作type[][]字符串 我没有设法在印刷板(board[:][:])上更正它 我尝试删除调用中的一个/两个分号,但都无效如果可能,我不想指定任何长度在go中,数组具有与切片相反的固定大小,因此这里您需要指定数组的大小作为参数,否则将出现以下错误: prog.go:13:12:无法将board(类型[2][3]字符串)用作printBoar

我很难在func中传递2d字符串数组的一部分:这是我的游乐场

它说,
不能在printBoard的参数中将board[:][:](type[][3]字符串)用作type[][]字符串

我没有设法在印刷板(board[:][:])上更正它


我尝试删除调用中的一个/两个分号,但都无效如果可能,我不想指定任何长度

在go中,数组具有与切片相反的固定大小,因此这里您需要指定数组的大小作为参数,否则将出现以下错误:

prog.go:13:12:无法将board(类型[2][3]字符串)用作printBoard的参数中的类型[][]字符串

这是:

输出

我不知道为什么您决定使用数组,但在go中,只要可能,您应该更喜欢使用切片而不是数组,因为它们更灵活、更干净、更不容易出现错误

以下是使用切片的实现:

package main

import (
    "fmt"
)

func main() {
    board := [][]string{
        {"O", "_", "O"},
        {"X", "O", "_"},
    }

    printBoard(board)
}

func printBoard(board [][]string){
    for _, line := range board {
        for _, cell := range line {
            fmt.Printf("%s", cell)
        }
        fmt.Println()
    }
}

请注意,您不需要更改逻辑,也不需要在任何地方指定大小。

谢谢,但是否可以通过使用切片来避免在调用中指定至少一个大小?就像这样:更简单,您不需要在任何地方指定任何大小。哦,是的,我设法省略了第一个维度:您可能只需要使用切片:除非您有充分的理由想要使用数组。请考虑“<代码>板[:]:< /> >与<代码>板[]:<代码>或<代码>板[:]:[/:] /<代码>为什么您不先将板变量声明为一片切片?阵列在golang中很少使用。99%的时候我们倾向于选择切片,以免它是非常特定的东西。事实上,这只是因为我习惯了Java/Javascript,而Java/Javascript中不存在切片。
package main

import (
    "fmt"
)

func main() {
    board := [2][3]string{
        {"O", "_", "O"},
        {"X", "O", "_"},
    }

    printBoard(board)
}

func printBoard(board [2][3]string){
    for _, line := range board {
        for _, cell := range line {
            fmt.Printf("%s", cell)
        }
        fmt.Println()
    }
}
O_O
XO_
package main

import (
    "fmt"
)

func main() {
    board := [][]string{
        {"O", "_", "O"},
        {"X", "O", "_"},
    }

    printBoard(board)
}

func printBoard(board [][]string){
    for _, line := range board {
        for _, cell := range line {
            fmt.Printf("%s", cell)
        }
        fmt.Println()
    }
}