猿问

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

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

Golang游乐场

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


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


慕莱坞森
浏览 107回答 1
1回答

MM们

在 go 中,数组有固定的大小,与切片相反,所以这里你需要指定数组的大小作为参数,否则你会得到这个错误:prog.go:13:12: cannot use board (type [2][3]string) as type [][]string in argument to printBoard这是固定的:package mainimport (    "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_OXO_我不确定您为什么决定使用数组,但总的来说,只要有可能,您应该更喜欢使用切片而不是数组,因为它们更灵活、更简洁且更不容易出错。这是使用切片的实现:package mainimport (    "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()    }}请注意,您不需要更改逻辑,也不需要再在任何地方指定大小。
随时随地看视频慕课网APP

相关分类

Go
我要回答