如何传递创建二维数组的切片

时间:2018-09-18 14:24:34

标签: go

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

Golang playground

package main

import (
    "fmt"
)

func main() {
    board := [2][3]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()
    }
}

上面写着cannot use board[:][:] (type [][3]string) as type [][]string in argument to printBoard

我没有设法纠正它printBoard(board [:] [:])。

我尝试通过删除呼叫中的一个/两个分号来进行操作,但均不起作用。 我不想指定任何长度

1 个答案:

答案 0 :(得分:1)

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

prog.go:13:12: cannot use board (type [2][3]string) as type [][]string in argument to printBoard

这里是papers

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()
    }
}

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