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

问题描述 投票:0回答:1

我无法在func中传递一片二维数组:这是我的游乐场

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(板[:] [:])。

我尝试通过删除调用中的一个/两个分号,但也没有工作。如果可能的话,我不想指定任何长度

go
1个回答
1
投票

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

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

这是fixed

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

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

© www.soinside.com 2019 - 2024. All rights reserved.